Home > しらべる > log4jのphp版、log4phpをつかってみた

log4jのphp版、log4phpをつかってみた

  • Posted by: memorycraft
  • 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があるので、これでかなり柔軟なログ出力ができるぞ

関連記事

Trackbacks:0

TrackBack URL for this entry
http://www.memorycraft.jp/mt-tb.cgi/112
Listed below are links to weblogs that reference
log4jのphp版、log4phpをつかってみた from メモリークラフト

Comments:0

Comment Form

Home > しらべる > log4jのphp版、log4phpをつかってみた

ページの先頭へ戻る