PHPベストプラクティス >

PHP CommonsLogging (0.9.0以降)

使用例

  • クラスでは、通常ロガーは静的メンバに格納しますので、(staticブロックがなく、メンバの初期化が定数でしか行えないPHPでは)クラス定義直後のグローバルな空間でロガーを取得し設定するしかないでしょう。場合によっては、コンストラクタメソッド内でもいいかもしれません。DIコンテナを使用する場合には、コンテナでのインジェクトも可能でしょう。
  • クラス内での後処理(shutdown)は、デストラクタメソッド内で行うしかありません。
      1
      2
      3
      4
      5
      6
      7
      8
      9
     10
     11
     12
    
    <?php
    require_once 'Commons/Logging/LogFactory.php';
    // ...
    $log = Commons_Logging_LogFactory::getLog(
        Commons_Logging_LogUtils::normalize(__CLASS__));
    if ($log->isDebugEnabled()) {
        $log->debug('debug message.');
    }
    $log->warn('warn message.');
    // ...
    $log->shutdown();
    ?>

設定

明示的設定の優先順位

  • デフォルトのログファクトリ実装(Commons_Logging_Impl_LogFactoryImpl?)では、以下の優先順位で、設定が有効になります。
    順位設定場所備考
    1設定ファイル(commons-logging.properties)
    2環境変数(getenvで取得)

設定ファイル

  • include_path のルートにある commons-logging.properties を設定ファイルとして読み込みます。設定ファイルが存在しない場合には、利用可能なデフォルトのロギングフレームワークが使用されます。

設定プロパティ

  • 設定ファイルでは、以下のプロパティを設定できます。もちろん、commons.logging.LogFactory? に独自のログファクトリ実装を設定した場合には、2以降の設定項目は無効となります。
    No.プロパティ説明デフォルト備考
    1commons.logging.LogFactory?ログファクトリ実装クラス名Commons_Logging_Impl_LogFactoryImpl?
    2commons.logging.Logロガー実装クラス名-
    3log4php.configurationlog4php設定ファイルパス(include_path上の/区切りの相対パスか、ファイルシステム上の絶対パス)-ロガー実装に log4php を設定した場合のオプション。定数 LOG4PHP_CONFIGURATION に設定されます。設定されない場合には、log4phpの設定初期化が行われます。
    4pearlog.configurationPEAR Log設定ファイルパス(include_path上の/区切りの相対パスか、ファイルシステム上の絶対パス)Commons/Logging/Impl/pearlog_default.propertiesこの設定がない場合には、標準エラーにINFOレベルでログ出力されます。
  • 設定例
    Everything is expanded.Everything is shortened.
      1
      2
      3
      4
      5
      6
      7
      8
      9
     10
     11
     12
     13
     14
     15
     16
    
    -
    |
    !
    -
    |
    |
    |
    |
    |
    !
     
    -
    |
    !
    -
    |
    
    ## Default LogFactory
    #commons.logging.LogFactory = Commons_Logging_Impl_LogFactoryImpl
     
    ## Default Logger
    #commons.logging.Log = Commons_Logging_Impl_SimpleLog
    ## No operation logger
    #commons.logging.Log = Commons_Logging_Impl_NoOpLog
    ## PEAR Log logger
    #commons.logging.Log = Commons_Logging_Impl_PEARLogLogger
    commons.logging.Log = Commons_Logging_Impl_Log4PHPLogger
     
    ## Log4PHP Property (optional)
    ## LOG4PHP_CONFIGURATION
    log4php.configuration = /etc/log4php/log4php.properties
    ## PEAR Log Property (required)
    #pearlog.configuration = Commons/Logging/Impl/pearlog.properties
    

デフォルト設定

  • 何も設定を行わない場合、以下の順に利用可能なロギングフレームワークが選択されます。
    順位ロギングフレームワーク備考
    1log4php
    2PEAR Log
    3SimpleLog?PHP Commons組込み

NDC、MDC(ver. 1.0.3以降)

  • 診断コンテキスト(diagnostic context)は、主に同一リクエストを識別するメッセージ(アクセス元IPやユーザIDなど)などによって弁別されます。以下の仕組みによりそれらの識別メッセージをログ行に出力することができます。現在これに対応している実装は、log4phpのみです。
  • NDC(Nested Diagnostic Contexts): スタックモデルで、診断コンテキストを管理でき、ログ出力することができます。
    No.インタフェイス説明備考
    1Log#pushNDC診断コンテキストとして、メッセージをスタックにプッシュします。ログレイアウトでは、%x で参照できます。
    2Log#popNDCプッシュされた最後のメッセージをスタックから削除します。
    3Log#clearNDC診断コンテキストスタックをすべてクリアします。
  • NDC(Mapped Diagnostic Contexts): マップに診断コンテキストを格納し、ログ出力することができます。
    No.インタフェイス説明備考
    1Log#putMDC診断コンテキストとして、メッセージをマップにキーとともに追加します。ログレイアウトでは、%X{key} で参照できます。
    2Log#removeMDCメッセージをマップから削除します。

Log4PHP 設定

  • commons-logging.properites 内の log4php.configuration プロパティで設定ファイルを指定することができます。ただし、すでに定数 LOG4PHP_CONFIGURATION が定義済の場合には、log4php.configuration プロパティは有効となりません。また、LOG4PHP_CONFIGURATION も定義せず、log4php.configuration プロパティも設定しない場合には、log4phpの通常の設定初期化が行われます。log4php.configuration プロパティを設定することをおすすめします。
  • log4phpは、設定ファイルの拡張子によって、フォーマット(プロパティ/XML)を識別します。CommonsLoggingを使った場合でも、両方のフォーマットを使用することができます。
  • なお、log4php では、LoggerManager?.phpロード時*1に LOG4PHP_CONFIGURATION が初期化されてしまいますので、設定を後から変更することができません。

PEAR Log 設定

  • PEAR Log 自身には、設定ファイルに基づいてロガーを構築するという機能がありませんので、PHP Commons では log4php ライクな設定ファイル機能を提供します。設定ファイル名は、commons-logging.properties で指定できますが、pearlog.properties をおすすめします。
  • PEAR Log には、カテゴリの概念と継承機能がありませんが、PHP Commons がその部分を拡張しています。ただし、設定レベルでの拡張ですので、CommonsLoggingを介さずに PEAR Log のカテゴリ拡張を使うことはできません。
  • また、PEAR Log にある、任意のプライオリティレベルのマスク機能は、ログ管理を煩雑にしますので、この設定ファイルでは提供しないものとします。
  • 設定ファイルによる設定を行わない場合には、標準エラーにINFOレベルでログ出力されます。
  • 設定フォーマットは以下の通りです。ロガーとログハンドラ*2の設定はその数だけ繰り返します。
    No.プロパティ説明必須設定例備考
    1pearlog.rootLoggerルートロガーの設定"INFO, C1, F1"最初の項目がプライオリティ、以降はハンドラの識別子
    2pearlog.logger.<カテゴリ名>ロガーの設定-"DEBUG, C1, SYS1"最初の項目がプライオリティ、以降はハンドラの識別子
    3pearlog.additivity.<カテゴリ名>ハンドラのAdditivity(加算性)フラグ-true/false指定されていない場合のデフォルトはtrue
    4pearlog.handler.<ハンドラ識別子>ログハンドラのタイプを設定console
    5pearlog.handler.<ハンドラ識別子>.resourceログハンドラごとのログリソースの設定ファイルパス、LOG_SYSLOGPEAR Log の定数も可
    6pearlog.handler.<ハンドラ識別子>.<ハンドラ設定パラメータ名>ログハンドラごとのパラメータを設定-ほとんどのパラメータは設定できるが、文字列から変換が困難なオブジェクトは設定不可。詳細は、PEAR Log のマニュアルを参照のこと。
  • 設定ファイル例
    Everything is expanded.Everything is shortened.
      1
      2
      3
      4
      5
      6
      7
      8
      9
     10
     11
     12
     13
     14
     15
     16
     17
     18
     19
     20
     21
     22
     23
     24
     25
     26
     27
    
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
    
    pearlog.rootLogger=INFO, C1, F1
     
    pearlog.logger.Commons.Logging=DEBUG, SYS1
    pearlog.additivity.Commons.Logging=true
    pearlog.logger.Commons.Logging.Impl=INHERIT, F1
    pearlog.additivity.Commons.Logging=false
     
    pearlog.handler.C1=console
    pearlog.handler.C1.resource=
    pearlog.handler.C1.stream=STDOUT
    pearlog.handler.C1.buffering=false
    pearlog.handler.C1.lineFormat=%1$s %2$s [%3$s] %4$s
    pearlog.handler.C1.timeFormat=%b %d %H:%M:%S
     
    pearlog.handler.F1=file
    pearlog.handler.F1.resource=/tmp/commons.log
    pearlog.handler.F1.append=true
    pearlog.handler.F1.locking=false
    pearlog.handler.F1.mode=0644
    pearlog.handler.F1.dirmode=0755
    pearlog.handler.F1.eol=\n
    pearlog.handler.F1.lineFormat=%1$s %2$s [%3$s] %4$s
    pearlog.handler.F1.timeFormat=%b %d %H:%M:%S
     
    pearlog.handler.SYS1=syslog
    pearlog.handler.SYS1.resource=LOG_SYSLOG
    pearlog.handler.SYS1.inherit=false

SimpleLog? 設定

  • 何も設定しない場合には、標準エラーに、INFOレベル以上のログが、簡潔な形式(カテゴリ名は短縮名で、時刻表示なし)で出力されます。
  • 設定は、環境変数、設定ファイルの順に優先されます。
  • 設定ファイルを利用する場合には、include_path のルートにある simplelog.properties になります。
  • 設定例は以下の通り。プロパティ名は、環境変数で設定する場合も同様です。
    Everything is expanded.Everything is shortened.
      1
      2
      3
      4
      5
      6
      7
      8
      9
    
    -
    !
    -
    |
    |
    |
    |
    !
     
    
    # Priority Levels: ALL, TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF
     
    # Default settings
    #commons.logging.simplelog.showlogname = false
    #commons.logging.simplelog.showShortLogname = true
    #commons.logging.simplelog.showdatetime = false
    #commons.logging.simplelog.defaultlog = INFO
     
    commons.logging.simplelog.log.Commons.Logging = DEBUG

参考


*1 CommonsLogging では、ロガー構築時にロードします。
*2 機能的位置づけは、log4phpのアペンダと同様。ログイベントをハンドリングする意。

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2008-11-14 (金) 01:11:35 (3937d)