Monday, March 29, 2010

log4php programmatically runtime setfile in appender LoggerAppenderFile

I don't PHP very often but lately I needed a robust log. I used a lot log4j so immediately turn to log4php The documentation is still very poor with very little examples on the net. In particular, I needed to set some options at runtime or programmatically, especially the filename for the LoggerAppenderFile, so here is a little minimalistic example on how to do it:



require_once('log4php/Logger.php');

$rootlogger = Logger::getRootLogger();
$rootlogger->setLevel(LoggerLevel::DEBUG);

$appender = new LoggerAppenderFile("MyAppender");
$appender->setFile("mylogfile.log", true);
$appenderlayout = new LoggerLayoutTTCC();
$appender->setLayout($appenderlayout);
$appender->activateOptions();

$rootlogger->removeAllAppenders();
$rootlogger->addAppender($appender);

$rootlogger->info("info");
$rootlogger->error("error");
$rootlogger->debug("debug");




if you don't use the rootlogger you don't need to removeAllAppenders in order to get rid of the console one.

1 comments:

Erik said...

There is a subtle bug in this post:

$rootlogger->setLevel(LoggerLevel::DEBUG);
Should instead be:

$rootlogger->setLevel(LoggerLevel::toLevel(LoggerLevel::DEBUG));

See this stackoverflow question for more detail:

http://stackoverflow.com/questions/2658146/log4php-change-log-file-name-dynamically-in-log4php-properties