我刚刚在我的应用程序中添加了一个嵌入式Jetty / Jersey服务器,它使用带有slf4j绑定的log4j2日志记录提供程序。日志库位于类路径中,Jetty使用它们,如下所述:
https://www.eclipse.org/jetty/documentation/9.4.x/configuring-logging.html
这是一件好事,除了Jetty中的DEBUG
级别非常嘈杂,正如那里提到的那样。
我有三个appender(一个控制台和两个文件)都在不同的级别,其中一个的文件名是以编程方式配置的,除此之外,配置在log4j2.properties
文件中指定。所以设置有点复杂,但它完全符合我的需要。
是否有一种简单的方法可以在处理消息字符串之前将Jetty调试消息转换为跟踪和/或仅根据包名称过滤掉调试消息?
我不希望转换日志记录级别变得容易或可能,但要求它并不会有什么坏处。
就过滤而言,换句话说,我想根据包指定不同的级别,INFO
为org.eclipse.jetty
和子包TRACE
为默认情况下,或TRACE
为我的包和子包,默认为INFO
。理想情况下,这应该在一个地方完成,但并非必须如此。
我对记录器和追加器仍然有点困惑,所以我通过反复试验来解决这个问题。例如,rootLogger.level
似乎不会影响任何内容,因此我猜测我无法通过rootLogger
指定过滤器。我发现的一些参考文献建议创建一个名称与特定类匹配的记录器,但我不确定这对于这个问题是如何工作的 - 它是否适用于包/子包级别过滤,如果是,我是否需要创建多个可以写入相同appender的记录器?
答案 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
,这似乎是其工作原因。奇怪的是,这个文件记录器也影响我的代码的控制台输出,这对我有用,但我不明白为什么它有用。