如何在slf4j / log4j2中过滤出Jetty DEBUG消息?

时间:2017-09-12 06:32:07

标签: logging log4j slf4j log4j2

我刚刚在我的应用程序中添加了一个嵌入式Jetty / Jersey服务器,它使用带有slf4j绑定的log4j2日志记录提供程序。日志库位于类路径中,Jetty使用它们,如下所述:

https://www.eclipse.org/jetty/documentation/9.4.x/configuring-logging.html

这是一件好事,除了Jetty中的DEBUG级别非常嘈杂,正如那里提到的那样。

我有三个appender(一个控制台和两个文件)都在不同的级别,其中一个的文件名是以编程方式配置的,除此之外,配置在log4j2.properties文件中指定。所以设置有点复杂,但它完全符合我的需要。

是否有一种简单的方法可以在处理消息字符串之前将Jetty调试消息转换为跟踪和/或仅根据包名称过滤掉调试消息?

我不希望转换日志记录级别变得容易或可能,但要求它并不会有什么坏处。

就过滤而言,换句话说,我想根据包指定不同的级别,INFOorg.eclipse.jetty和子包TRACE为默认情况下,或TRACE为我的包和子包,默认为INFO。理想情况下,这应该在一个地方完成,但并非必须如此。

我对记录器和追加器仍然有点困惑,所以我通过反复试验来解决这个问题。例如,rootLogger.level似乎不会影响任何内容,因此我猜测我无法通过rootLogger指定过滤器。我发现的一些参考文献建议创建一个名称与特定类匹配的记录器,但我不确定这对于这个问题是如何工作的 - 它是否适用于包/子包级别过滤,如果是,我是否需要创建多个可以写入相同appender的记录器?

2 个答案:

答案 0 :(得分:2)

如何给org.eclipse.jetty一个logger并将其设置为error level和additivity = false,并将appender设置为console或其他日志,这样它就不会记录到root logger来打扰你。

<Appenders>        
    <Console name="Console" target="SYSTEM_OUT">
        <PatternLayout pattern="%-5p:[%c.class(%c{1}.java:%L)] %m%n"/>             
    </Console>                
</Appenders>

<Logger name="org.eclipse.jetty" level="error" additivity="false">            
    <AppenderRef ref="Console"/>
</Logger>

答案 1 :(得分:0)

我的临时解决方案是将rootLogger.level更改为info,这会影响Jetty(org.eclipse.jetty),但不会影响我的代码(net.....)。我拥有的唯一其他记录器是文件记录器,它的名称为net,这似乎是其工作原因。奇怪的是,这个文件记录器也影响我的代码的控制台输出,这对我有用,但我不明白为什么它有用。