我正在使用log4j2为项目做一些日志记录。配置中的“我的记录器”部分如下所示。
<Loggers>
<!-- default logger -->
<Root level="info">
<AppenderRef ref="Console"/>
</Root>
<!-- only log warn/error/fatal for external libs -->
<Logger name="org.cfg4j" level="warn" additivity="false">
<AppenderRef ref="Console"></AppenderRef>
</Logger>
<Logger name="io.netty.util" level="warn" additivity="false">
<AppenderRef ref="Console"></AppenderRef>
</Logger>
</Loggers>
就抑制来自io.netty.util的DEBUG级别消息而言,这似乎没有任何效果。
我用谷歌搜索“ io.netty.util logging”,并提出了this。似乎有一种方法可以覆盖默认记录器
public abstract class InternalLoggerFactory {
private static volatile InternalLoggerFactory defaultFactory;
static {
final String name = InternalLoggerFactory.class.getName();
InternalLoggerFactory f;
try {
f = new Slf4JLoggerFactory(true);
f.newInstance(name).debug("Using SLF4J as the default logging framework");
defaultFactory = f;
} catch (Throwable t1) {
try {
f = new Log4JLoggerFactory();
f.newInstance(name).debug("Using Log4J as the default logging framework");
} catch (Throwable t2) {
f = new JdkLoggerFactory();
f.newInstance(name).debug("Using java.util.logging as the default logging framework");
}
}
defaultFactory = f;
}
我尝试了一下,但是遇到了一些问题。首先,我的IDE(intellij)告诉我不赞成使用Log4JLoggerFactory。我继续,但随后发现该实例不包含一个名为“ newInstance”的方法。
因此,我对如何进行此操作感到有些困惑。有没有办法让log4j以我所认为的方式抑制外部库DEBUG / INFO级别的消息?
最佳答案
如果记录器是在log4j 1.x api(答案的原始版本)中定义的:
问题是log4j 1.x api不使用log4j2属性。
添加log4j-1.2-api.jar作为log4j 1.x网桥,它应该可以解决您的问题。
但是似乎净值的默认loggerfactory是Slf4JLoggerFactory,所以实际需要的是slf4j桥。 slf4j-log4j12到log4j 1.x,log4j-slf4j-impl到log4j2.x。