SLF4J-Log4j记录器未记录

IAm*_*aja 9 java logging tomcat log4j slf4j

我想第一次使用SLF4J-Log4j.在每个Java类中,我都定义了一个这样的记录器:

private org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(<TheClass>.class);
Run Code Online (Sandbox Code Playgroud)

(当然,我确保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
Run Code Online (Sandbox Code Playgroud)

这个WAR使用Quartz来完成一些工作,这就是你看到最后一个条目的原因.

当我检查Tomcat的logs /目录时,我看到MyAppMonitor.logget已创建,但它没有任何内容(0字节).我已经扫描了所有典型的catalina.out,catalina-和localhost-日志,而且我的日志语句都没有看到日光.

我在想:

  1. 我没有log4j.properties正确配置,或
  2. 我没有正确配置slf4j-log4j,或者
  3. 这是一个类路径问题,也许WAR找不到log4j.properties(虽然我会想象我会看到错误或警告),或者
  4. 我没有正确使用(API本身)SLF4J,或者
  5. 我从来没有真正创造过所谓的东西MonitorAppender,所以我想知道这是不是问题; 我只是按照我在网上看到的一个例子

任何人都可以找到我要去的地方,或者帮我排除故障吗?提前致谢!

Cek*_*eki 12

您的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
Run Code Online (Sandbox Code Playgroud)

对于您问题中的配置文件,根记录器没有附加的appender.而且,行

log4j.logger.*=DEBUG,MonitorAppender
Run Code Online (Sandbox Code Playgroud)

无效,因为不支持"*".