1

パーサーを作成していて、デバッグ メッセージと WARN メッセージを別のファイルに出力したいと考えています。

コードは非常に簡単です。

 logger(log4cplus::Logger::getInstance(LOG4CPLUS_TEXT("TParser")));
 LOG4CPLUS_WARN/DEBUG(logger, "XYZ");

次の構成ファイルを使用しようとしました

log4cplus.logger.TParser=DEBUG, TD

log4cplus.appender.TD=log4cplus::RollingFileAppender
log4cplus.appender.TD.MaxFileSize=5MB
log4cplus.appender.TD.MaxBackupIndex=5
log4cplus.appender.TD.layout=log4cplus::TTCCLayout
log4cplus.appender.TD.File=debug.log

log4cplus.logger.TParser=WARN, TW
log4cplus.appender.TW=log4cplus::RollingFileAppender
log4cplus.appender.TW.MaxFileSize=5MB
log4cplus.appender.TW.MaxBackupIndex=5
log4cplus.appender.TW.layout=log4cplus::TTCCLayout
log4cplus.appender.TW.File=trace.log

しかし、デバッグは生成されません... [ log4cplus.logger.TParser=WARN, TW ] とその後の行を削除すると、デバッグを生成します。

また、データをコンソールに出力したくありません。使い方を学ぶのに苦労していますが、log4cplusに関するコンテンツはあまりありません

4

1 に答える 1

1

プロパティ ファイルの問題の 1 つは、値を に設定する 2 つの行があることですlog4cplus.logger.TParser。このプロパティを設定する行は、このプロパティを設定する 2 番目の行によって上書きされます。

ログ レベルごとにファイルを分けるということは、まあ、可能ですが、通常は行うことではありません。まず、INFO、ERROR、FATAL、TRACE など、DEBUG や WARN だけでなく、さらに多くのログ レベルがあることを認識してください。それらはどこに行きますか?

フィルタを使用して、さまざまなログ レベルをさまざまなファイルに記録できます。文字通り DEBUG ログ レベルのみ (DEBUG と TRACE ログ レベルの両方ではなく) をファイルに出力する場合は、LogLevelMatchFilter(またはLogLevelRangeFilterログ レベルの範囲が必要な場合) DEBUG ログ レベル イベントのみをログに記録するアペンダーを設定します。 . 次に、WARN ログ レベルに一致するフィルターを使用して別のアペンダーをセットアップし、同じロガーにアタッチします。あなたの場合、これを使用します:

log4cplus.logger.TParser=DEBUG, TD, TW

1 つのロガーからのログがルート ロガーに到達しないようにするには、加法性を無効にします。

log4cplus.additivity.TParser=false

この行により、TParserロガーに到達するイベントは、ルート ロガーに向かってそれ以上伝播しません。

于 2015-12-01T06:34:27.077 に答える