12

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

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

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

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.loggetが作成されているのがわかりますが、何も含まれていません(0バイト)。私はすべての典型的なcatalina.out、catalina-、およびlocalhost-ログもスキャンしましたが、私のログステートメントはどれも日の目を見ることはありません。

私は考えています:

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

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

4

1 に答える 1

16

構成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

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

于 2012-10-18T15:22:48.247 に答える