2010年5月4日火曜日

log4phpのLoggerConfiguratorPhp.php

LoggerConfiguratorPhpでLoggerAppenderRollingFileを使えるよう、
修正してみました。
@@ -85,8 +85,6 @@
                    
                }
                
-                // added by viva(2010.05.04)
-                $this->_validateApender($appender, $appenderProperties);
            }
            
        }
@@ -131,21 +129,6 @@
        }
        
        return true;
-    }
-
-    //
-    // added by viva(2010.05.04)
-    //
-    protected function _validateApender($appender, $appenderProperties)
-    {
-        $validater = new LoggerReflectionUtils($appender);
-        foreach ($appenderProperties as $pk => $pv) {
-            if ($pk == 'class' || $pk == 'layout') {
-                continue;
-            }
-            $validater->setProperty($pk, $pv);
-        }
-        $validater->activate();
    }
    
}


定義ファイルは次のようにPHP配列の形で書きます。
<?php
return array(
        'threshold' => 'ALL',
        'rootLogger' => array(
            'level' => 'INFO',
            'appenders' => array('default'),
        ),
        'loggers' => array(
            'dev' => array(
                'level' => 'DEBUG',
                'appenders' => array('default'),
            ),
        ),
        'appenders' => array(
            'default' => array(
                'class' => 'LoggerAppenderRollingFile',
                'layout' => array(
                    'class' => 'LoggerLayoutPattern',
                    'conversionPattern' => "%d [%p]: %m (remote_ip_address=[%X{ip_address}] uri=[%X{uri}])%n",
                ),
                'file' => 'logging.log',
                'MaxFileSize' => '100k',
                'MaxBackupIndex' => 3,
            ),
        ),
    );
?>

LoggerConfiguratorPhpを使って便利なのは、
たとえばlog出力先を絶対パス指定や
"../hoge/"のようなあまり使いたくない形式の相対パス指定で
書かずに、"$logpath/log.txt"のように変数指定できるので、
設定を動的に変更することが容易になる
ことが挙げられます。


ちなみに、呼び出しは、次のようにします。
        LoggerMDC::put('ip_address', $_SERVER['REMOTE_ADDR']);
        LoggerMDC::put('uri', $_SERVER['REQUEST_URI']);

        Logger::configure('configurator_php.php', 'LoggerConfiguratorPhp');
        $logger = Logger::getRootLogger();
        $logger->info("logging start");


とは言え、大して需要があるとも思えませんので、
覚書程度に書き残している次第です。

2 件のコメント:

  1. 初めまして。
    LoggerConfiguratorPhpでLoggerAppenderRollingFileを使い、動的にfileの指定をしたかったので、とても参考になりました!

    本当に、ありがとうございました。

    返信削除
  2. いま読み返しても、我ながら正に覚書程度の記述内容でしたが、お役に立てて光栄です。

    返信削除

どうかお気軽にコメント頂ければ幸いです。