1

log4cplus (log4j に似ているため、私のタグ) ライブラリを試しています。

プロパティ ファイルから、次のようにロガー レベルをその親に依存させることは可能ですか。

  • parent=INFO & child=WARN の場合、子はメッセージをログに記録する必要があります >= "WARN"
  • parent=OFF & child=WARN の場合、子はメッセージをログに記録しません。
  • parent.parent=ALL & parent=WARN & child=INFO の場合、子はメッセージをログに記録する必要があります >= WARN
  • parent.parent=OFF & parent=ALL & child=WARN の場合、parent.parent が原因でメッセージをログに記録する必要はありません。

以下の私のコードでは、結果は次のとおりです(そして間違っています!)

  • parent=WARN & child=FATAL 、子は WARN メッセージをログに記録しています
  • parent=OFF & child=WARN 、子はメッセージをログに記録しています。

私のプロパティファイル - log.properties:

    log4cplus.logger.cpuLoad=WARN, FILEAPPENDER
    log4cplus.logger.cpuLoad.child=FATAL, FILEAPPENDER
    log4cplus.additivity.cpuLoad.child=false

    log4cplus.appender.FILEAPPENDER=log4cplus::RollingFileAppender
    log4cplus.appender.FILEAPPENDER.File=./cpuLoad.log
    log4cplus.appender.FILEAPPENDER.MaxFileSize=1MB
    log4cplus.appender.FILEAPPENDER.layout=log4cplus::PatternLayout
    log4cplus.appender.FILEAPPENDER.layout.ConversionPattern=%d{%m/%d/%y %H:%M:%S} %-5p %c{2} – %m%n

私のC++コード - main.cpp:

    Logger loggerCpu = Logger::getInstance("cpuLoad");
    Logger loggerCpuChild = Logger::getInstance("cpuLoad.child");

    LOG4CPLUS_WARN(loggerCpu, "hello from loggerCpu");
    LOG4CPLUS_WARN(loggerCpuChild, "hello from loggerCpuChild" );

これを log4cplus ライブラリ自体から、そして主にプロパティ ファイルから機能させたいと考えています。getParent() を使用できるように、この親子関係も必要です。前もって感謝します!

4

1 に答える 1

0

この行を変更してみてください

log4cplus.logger.cpuLoad.child=FATAL, FILEAPPENDER

これに

log4cplus.logger.cpuLoad.child=INHERITED, FILEAPPENDER

これでうまくいくはずです。

編集:

@jaguzu: log4j についてはよくわかりませんが、あなたが達成しようとしているのは、log4j と log4cplus の両方が使用するモデルの外にあるようです: ログレベルを明示的に設定するか、親ロガーから継承します。ロガーのしきい値とアペンダー フィルターを使用してさらにフィルタリングを実装できますが、どちらも親ロガー (AFAIK) から継承されていません。

于 2012-12-30T17:47:48.157 に答える