如何控制第 3 方库中的登录

Mar*_*ney 5 java logging tomcat slf4j

我有一个运行基于 Spring 的 servlet 的 Tomcat 服务器。

我已经设置了[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
Run Code Online (Sandbox Code Playgroud)

这正确地记录了我自己的代码,但似乎对我正在使用的各种库中的记录没有任何影响。例如,org.apache.*即使我添加log4j.logger.org.apache=WARN到我的 log4j.properties 中,我仍然会在 Tomcat 启动期间从Eclipse 控制台错误流中获取 INFO 日志。

我正在使用slf4j-apislf4j-log4jjars,通过 Maven 获得。

如何在自己的代码之外控制日志记录级别和目标?

dur*_*dur 3

一些库使用其他日志框架,例如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.LoggingSLF4J API):

通过logging.properties配置文件安装:

// 将 SLF4JBridgeHandler 注册为 jul 根记录器的处理程序

处理程序 = org.slf4j.bridge.SLF4JBridgeHandler

有关配置java.util.Logging请参阅JUL API

有些库(例如 Apache CXF)支持多个日志记录框架,请参阅Apache CXF - 调试和日志记录