外部のサードパーティフレームワークからのログメッセージをフィルタリングするにはどうすればよいですか? HibernateとSpringフレームワークを使用していて、log4jログのみが表示されるようにログを抑制したいと思います。
私のlog4j.propertiesファイルで、ルートロガーのログレベルをERRORに設定しました。次に、アプリケーションコードのように、特にログに記録するパッケージの場合、ログレベルをINFOまたはDEBUGに設定します。
log4j.rootLogger=ERROR, stdout
log4j.logger.com.initech.tps=DEBUG
log4j.logger.org.hibernate.SQL=INFO
ルートロギングを低く設定して、見たくないものすべてをリストアップする同僚がいるのを私は思い起こします。ログに記録したくないものすべてよりも、ログに記録したいものをリストするほうがよいでしょう。
ところで、サードパーティコンポーネントのログを完全にオフにすることは、私には悪い考えのようです。たとえば、Springは比較的うるさく、本当に知る必要のないことにはWARNを使用しますが、何かを見たい場合はERRORエントリをログに記録します。
これは、log4j.properties/log4j.xmlファイルでロガーレベルを変更することで実行できます。
ログをパッケージからフィルタリングするが、後で使用できるようにロガー構成を保持する場合は、ロガーの<level value="off"/>
を設定する必要があります。エラーまたは致命的な問題が発生した場合にのみログに記録するように、これを最高レベルに設定することもできます。
Hibernateおよびspringframeworkパッケージからのロギングをオフにするには、log4j.xmlに次のエントリを追加する必要があります。
<logger name="org.springframework">
<level value="off"/>
</logger>
<logger name="org.hibernate">
<level value="off"/>
</logger>
Log4j.propertiesでは、ロガーごとに個別のレベルを定義できます。
log4j.logger.<name>=FATAL
Log4j.xmlの構文は次のとおりです。
<logger name="<name>">
<level value="fatal"/>
</logger>
<name>は多くの場合、完全修飾クラス名です。 FATALの代わりにWARNまたはERRORを使用することができます
これらのパッケージをlog4j.propertiesに追加しないでください。たとえば、Springのプロパティファイルにこれが必要です。以下のようなエントリ(org.springframeworkで始まるもの)がある場合は、削除してください。休止状態についても同じことが必要です。
#Logs the SQL from Spring
log4j.logger.org.springframework.jdbc.core.JdbcTemplate=ERROR
#Logs the SQL parameters from Spring
log4j.logger.org.springframework.jdbc.core.StatementCreatorUtils=ERROR
また、前述のように、以下も設定する必要があります。これについて言及するのを忘れました。
log4j.rootLogger=FATAL
or
log4j.rootLogger=ERROR