我有一个Tomcat服务器,运行一个基于Spring的servlet。
我已经将[project root]/src/log4j.properties
文件设置如下:
# Root logger option
log4j.rootLogger=WARN, stdout
# Redirect log messages to console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%-5p %d{HH:mm:ss} %m [%c{3}:%L]%n
log4j.logger.com.martincarney.bugTracker=DEBUG
log4j.logger.com.martincarney.bugTracker.controller=ERROR
这很好地正确地记录了我自己的代码,但似乎对我使用的各种库中的日志记录没有任何影响。例如,在Tomcat启动期间,即使我将log4j.logger.org.apache=WARN
添加到我的log4j.properties中,我仍然会将INFO日志从org.apache.*
获取到Eclipse控制台错误流中
我使用的是通过Maven获得的slf4j-api
和slf4j-log4j
jar。
如何在自己的代码之外控制日志记录级别和目标?
一些库使用其他日志框架,如java.util.logging
。
您可以使用SLF4J重定向日志记录,请参阅SLF4J-桥接遗留API:
雅加达公共日志重定向:
为了方便从JCL迁移到SLF4J,SLF4J发行版包含jar文件
jcl-over-slf4j.jar
。这个jar文件旨在作为JCL 1.1.1版本的一个替代品。它实现了JCL的公共API,但在下面使用SLF4J,因此命名为"JCL over SLF4J"
java.util.Logging
(SLF4J API)重定向:
通过logging.properties配置文件安装:
//将SLF4JBridgeHandler注册为j.u.l.根记录器的处理程序
handlers=org.slf4j.bridge.SLF4JBridgeHandler
关于java.util.Logging
的配置,请参见JUL API。
有些库(如ApacheCXF)支持多个日志记录框架,请参阅ApacheCXF-调试和日志记录。