3

加法性、カテゴリロギングレベル、およびアペンダーしきい値の関係を理解するのに問題があります。

これがシナリオです(私のlog4j.propertiesファイル):

log4j.category.GeneralPurpose.classTypes=INFO, webAppLogger
log4j.additivity.GeneralPurpose.classTypes=true

log4j.category.GeneralPurpose=ERROR, defaultLogger
log4j.additivity.GeneralPurpose=false

log4j.appender.webAppLogger=org.apache.log4j.RollingFileAppender
log4j.appender.webAppLogger.File=webapps/someWebApp/logs/webApp.log
log4j.appender.webAppLogger.MaxFileSize=3000KB
log4j.appender.webAppLogger.MaxBackupIndex=10
log4j.appender.webAppLogger.layout=org.apache.log4j.PatternLayout
log4j.appender.webAppLogger.layout.ConversionPattern=%d [%t] (%F:%L) %-5p - %m%n
log4j.appender.webAppLogger.Encoding=UTF-8

log4j.appender.defaultLogger=org.apache.log4j.RollingFileAppender
log4j.appender.defaultLogger.File=logs/server.log
log4j.appender.defaultLogger.MaxFileSize=3000KB
log4j.appender.defaultLogger.MaxBackupIndex=10
log4j.appender.defaultLogger.layout=org.apache.log4j.PatternLayout
log4j.appender.defaultLogger.layout.ConversionPattern=%d [%t] (%F:%L) %-5p - %m%n
log4j.appender.defaultLogger.Encoding=UTF-8

インサイト:カテゴリGeneralPurpose.classTypesはINFOカテゴリGeneralPurpose.classTypesには加法性がありますTRUEカテゴリGeneralPurposeはERRORカテゴリGeneralPurposeには加法性がありますFALSE

現在の構成では、親ロガー(カテゴリ)がエラーレベルのログに設定されているため、カテゴリGeneralPurpose.classTypes。*に送信されたINFOメッセージはwebAppLoggerにのみログに記録されると想定していました。ただし、これは当てはまりません。メッセージは2回ログに記録されます(各ログファイルに1つ)。イベントが加法性の一部として送信される場合、親カテゴリのERRORログレベルは考慮されていないようです。

  1. 私の観察は正しいですか、それとも何かが欠けていますか?
  2. server.logでエラーレベルのログのみを取得するには、構成をどのように変更する必要がありますか?
4

1 に答える 1

3

カテゴリのレベルによって、そのカテゴリで発生したイベントがログに記録されるか破棄されるかが決まります。子カテゴリから受信したイベントに対するフィルタリング効果はありません。

GeneraPurpose.classTypesのレベルがであるためINFO、重大度が低いイベントINFOは破棄されますが、残りは保持されます。

GeneralPurpose.classTypesの加法性があるためtrue、有効なイベントは、階層内の親カテゴリ(具体的には、を含む)に渡されますGeneralPurpose

にしきい値が設定されていないため、webAppLogger受信したすべてのイベントがログに記録されます。

にしきい値が設定されていないため、defaultLogger受信したすべてのイベントがログに記録されます。

defaultLoggerにイベントのみを含めるERRORか、それより悪い場合は、しきい値をに設定しますERROR

于 2012-04-09T23:25:13.180 に答える