概要
同サーバ内にバーチャルホスト切って同じプログラム置いたら、
ログの吐き出し場所がかぶって面倒なことになったので、
被らないようにうまくプログラムできないか調査しました。
log4phpの設定ファイル
log4phpの設定ファイルは下記のようなファイルになっています。
log4php.rootLogger=DEBUG log4php.logger.user=DEBUG,user_file log4php.appender.user_file = LoggerAppenderDailyFile log4php.appender.user_file.layout = LoggerLayoutPattern log4php.appender.user_file.layout.ConversionPattern="(%X{REMOTE_ADDR}) %d [%p] %c: %m%n" log4php.appender.user_file.datePattern = Ymd log4php.appender.user_file.file = /project/webapps/sys/var/applog/user_%s.log
log4php.properties
というファイル名から、ただのテキストファイルであると分かります。
プログラムでどうのこうのができないんですね。
なので一工夫が必要でした。
やったこと
LoggerReflectionUtils.php
の、
LoggerReflectionUtils::setProperty()
が、
上記のテキストファイルを読み込んで、=
で分割して設定をセットする関数でした。
public function setProperty($name, $value) { if($value === null) { return; } if($name=='file'){ $value = str_replace('project','project_test', $value); } $method = "set" . ucfirst($name); if(!method_exists($this->obj, $method)) { throw new Exception("Error setting log4php property $name to $value: no method $method in class ".get_class($this->obj)."!"); } else { return call_user_func(array($this->obj, $method), $value); } }
$nameが file
の時、設定値を書き換える処理を加えることで、
ログファイルの吐き出し場所を動的に切り替える事ができます。
バーチャルホストで切ってあるディレクトリを動的に入力すると、
同じプログラムでログ吐き出し場所がごっちゃになる事がなくなります。