I found some more messages on this after digging and going through
source. I can see why the symfony develolpers wanted to simplify
tasks so they don't require contexts. Unfortunately, it also means
that a lot of code may not be reusable in tasks. I'm not sure if
there is a happy balance that can be struck.
I saw some hacks - people patching the sfTask itself. I'd rather not
do that. Here is my own "hack" attempting to be as reverse-compatible
as possible if and when I upgrade the core packages.
add an option in configure - this is a "dummy" environment's
configuration, used to create an application context, rather than
the :
new sfCommandOption('auxEnv', null,
sfCommandOption::PARAMETER_REQUIRED, 'The environment used for
logging', 'dev')
add the following into your task (or in a superclass):
protected function setupAuxEnv($arguments = array(), $options = array
())
{
// setup a context so we can log
$this->log('Initialize auxillary context');
$configuration = ProjectConfiguration::getApplicationConfiguration
($options['application'], $options['auxEnv'], true);
sfContext::createInstance($configuration, 'default');
// Now override the logger so that we use the same logging as
// the task
$logger = new sfTaskLogger($this->dispatcher, array('level' =>
'debug'));
sfContext::getInstance('default')->set('logger', $logger);
}
Create a simple task logger to wrap the existing logging ability of
the task:
class sfTaskLogger extends sfLogger
{
protected $dispatcher = null;
public function __construct(sfEventDispatcher $dispatcher, $options
= array())
{
$this->initialize($dispatcher, $options);
if (!isset($options['auto_shutdown']) || $options
['auto_shutdown'])
{
register_shutdown_function(array($this, 'shutdown'));
}
}
public function initialize(sfEventDispatcher $dispatcher, $options =
array())
{
if (isset($options['level']))
{
$this->setLogLevel($options['level']);
}
$this->dispatcher = $dispatcher;
}
protected function doLog($message, $priority)
{
$this->dispatcher->notify(new sfEvent($this, 'command.log', array
($message)));
}
}
On Jun 11, 2:14 pm, Steve Sanyal <[email protected]> wrote:
> Hi,
>
> Do you know how to enable logging in code called by a task?
>
> In the task itself you can use the sfTask::log function, but my task
> invokes other classes, some of which also contain logging.
>
> My log statements are not printing out. It seems the context doesn't
> get setup by the task to provide logging perhaps?
>
> Steve
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"symfony users" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/symfony-users?hl=en
-~----------~----~----~----~------~----~------~--~---