- 2010年4月27日 15:34
- しらべる
Apache の Loggingプロジェクトにlog4phpというのがあるので使ってみました。
ディレクトリ構成は以下のとおり
htdocs │ log4php │ ├ log4phpのファイル群 │ └ log4php.properties └ index.php
log4php.propertiesをこのように定義
log4php.rootLogger=DEBUG log4php.logger.my_logger=DEBUG,my_file log4php.appender.my_file = LoggerAppenderDailyFile log4php.appender.my_file.layout = LoggerLayoutPattern log4php.appender.my_file.layout.ConversionPattern="%d [%p] %c: %m (at %F line %L)%n" log4php.appender.my_file.datePattern = Ymd log4php.appender.my_file.file = my_daily_%s.log log4php.logger.api=DEBUG,other_file log4php.appender.other_file = LoggerAppenderDailyFile log4php.appender.other_file.layout = LoggerLayoutPattern log4php.appender.other_file.layout.ConversionPattern="%d [%p] %c: %m (at %F line %L)%n" log4php.appender.other_file.datePattern = Ymd log4php.appender.other_file.file = other_daily_%s.log
※実は以下のようにappenderのあとにloggerを定義していて、これだと片方しか出力されず、しばらくはまってしまいました。
log4php.appender.my_file = LoggerAppenderDailyFile log4php.appender.. .... log4php.appender.other_file = LoggerAppenderDailyFile log4php.appender.. .... log4php.logger.my_logger=DEBUG,my_file log4php.logger.other_logger=DEBUG,other_file
loggerの後にそのappenderを定義するのが正解のようです。
log4php.logger.my_logger=DEBUG,my_file log4php.appender.my_file = LoggerAppenderDailyFile log4php.appender..... ..... log4php.logger.other_logger=DEBUG,other_file log4php.appender.other_file = LoggerAppenderDailyFile log4php.appender..... .....
index.php はこんな感じ
require_once('log4php/Logger.php');
Logger::configure('log4php/log4php.properties');
class MyClass{
private $logger;
function __construct(){
if(!$this->logger){
$this->logger =Logger::getLogger('my_logger');
}
}
function doSomething(){
$this->logger->debug('私のsomething');
}
}
class OtherClass{
private $logger;
function __construct(){
if(!$this->logger){
$this->logger =Logger::getLogger('other_logger');
}
}
function doSomething(){
$this->logger->debug('だれかのsomething');
}
}
$my = new MyClass();
$other =new OtherClass();
$my->doSomething();
$other->doSomething();
出力結果は以下のとおり
my_daily_20100426.log
2010-04-26 23:25:05,320 [DEBUG] user: 私のsomething (at /Users/memorycraft/Development/workspace/logtest/htdocs/index.php line 12)
other_daily_20100426.log
2010-04-26 23:25:05,320 [DEBUG] other: だれかのsomething (at /Users/memorycraft/Development/workspace/logtest/htdocs/index.php line 24)
log4jと同様、いろいろなappenderがあるので、これでかなり柔軟なログ出力ができるぞ
