web-dev-qa-db-ja.com

SLF4J-Log4jロガーがログに記録されない

初めてSLF4J-Log4jを使おうとしています。すべてのJavaクラスで、次のようにロガーを定義します。

_private org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(<TheClass>.class);
_

(そしてもちろん、_slf4-log4j12-1.6.4.jar_ JARがクラスパス上にあることを確認します!)

しかし、logger.debug("Something interesting happened");logger.error("An error occurred");のようにロガーを使用しようとすると、ログファイルにそれらの出力が表示されません。ただし、例外は発生せず、アプリ(実際にはTomcatにデプロイされたWAR)は正常に実行されます。

プロジェクトに含まれている_log4j.properties_ファイルは次のとおりです。

_# Set the root logger to DEBUG.
log4j.rootLogger=DEBUG

# MonitorLog - used to log messages in the Monitor.log file.
log4j.appender.MonitorAppender=org.Apache.log4j.FileAppender
log4j.appender.MonitorAppender.File=${catalina.base}/logs/MyAppMonitor.log
log4j.appender.MonitorAppender.layout=org.Apache.log4j.PatternLayout
log4j.appender.MonitorAppender.layout.ConversionPattern= %-4r [%t] %-5p %c %x - %m%n

# Use the MonitorAppender to log all messages.
log4j.logger.*=DEBUG,MonitorAppender
org.quartz.impl.StdSchedulerFactory=DEBUG,MonitorAppender
_

このWARは、Quartzを使用していくつかのジョブをcronします。そのため、最後のエントリが表示されます。

Tomcatのlogs /ディレクトリを確認すると、_MyAppMonitor.log_が作成されているのがわかりますが、何も含まれていません(0バイト)。私はすべての典型的なcatalina.out、catalina-、およびlocalhost-ログもスキャンしましたが、私のログステートメントはどれも日の目を見ることはありません。

私は考えています:

  1. _log4j.properties_が正しく構成されていない、または
  2. Slf4j-log4jが正しく構成されていない、または
  3. これはクラスパスの問題であり、おそらくWARは_log4j.properties_を見つけることができません(これについてはエラーや警告が表示されると思いますが)、または
  4. (API自体)SLF4Jを正しく使用していない、または
  5. 私は実際にMonitorAppenderというものを作成したことがないので、これが問題なのかどうか疑問に思っています。私はオンラインで見た例に従っていました

誰かが私が間違っているところを見つけたり、これをトラブルシューティングするのを手伝ってくれますか?前もって感謝します!

9
IAmYourFaja

君の log4j.properties構成ファイルにはいくつかのエラーがあります。次のような簡単なもので試してください。

log4j.debug=true
log4j.rootLogger=DEBUG, CON

log4j.appender.CON=org.Apache.log4j.ConsoleAppender
log4j.appender.CON.layout=org.Apache.log4j.PatternLayout
log4j.appender.CON.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

あなたの質問の設定ファイルに関しては、ルートロガーにはアペンダーが添付されていません。また、ライン

log4j.logger.*=DEBUG,MonitorAppender

'*'はサポートされていないため、は無効です。

12
Ceki