Log4j2通配符日志记录器名称

11

我正在使用log4j来记录我的一个应用程序的日志。我的配置文件中的Loggers看起来像这样。

<Root level="info">
    <AppenderRef ref="Console"/>
</Root>

<Logger name="org.eclipse.jetty.server.Server" level="warn" additivity="false">
    <AppenderRef ref="Console"></AppenderRef>
</Logger>
<Logger name="org.eclipse.jetty.util.log" level="warn" additivity="false">
    <AppenderRef ref="Console"></AppenderRef>
</Logger>
<Logger name="org.eclipse.jetty.server.ServerConnector" level="warn" additivity="false">
    <AppenderRef ref="Console"></AppenderRef>
</Logger>

基本上,我希望从我编写的代码中获取“信息”级别的消息,但只希望在发生警告或更严重的情况时才记录外部库。

按照我的期望,这样做是可行的,但“org.eclipse.jetty”下有很多类。

是否可能像这样做?

<Logger name="org.eclipse.jetty.*" level="warn">
    <AppenderRef ref="Console" level="warn"></AppenderRef>
</Logger>

换言之,我希望整个包中的所有内容都只能发出警告/错误/致命错误。

我尝试了上述方法,但没有效果。是否有“通配符”或其他方法可以为包中的所有内容设置日志记录器?


1
现在不确定,但我认为这个包已经足够了 - 至少对于基于属性的配置而言,它是可以工作的。 - Simon Schrottner
哇,我甚至没有想到只是尝试包名。谢谢!如果您回答了问题,我会接受您的答案。 - Zack
2个回答

14

对于基于属性的配置,您只需简单地使用包名称而不使用任何通配符。这也适用于XML :)


1
我只希望有一种方法可以使它递归。 - Philippe
3
这能回答这个问题吗?它能让org.eclipse.jetty.*在lo4j2.xml中工作吗? - Shaohua Huang

0

我有类似的问题,但是在一个Apache Kafka库包中有大量的类,我只需要为下面正则表达式匹配的各种包启用日志记录, org.apache.kafka*.clients.

将来,如果我更新Kafka库并添加对版本大于2.6的Kafka Producer的支持,则会有相应版本的Producer支持它, 例如,可能会有带有包名称org.apache.kafka280.clients.producer的2.8版本。

这只是为了未来保护我的日志配置。

我想要记录的各种类如下。

org.apache.kafka.clients.producer
org.apache.kafka260.clients.producer
org.apache.kafka221.clients.producer
org.apache.kafka240.clients.producer
org.apache.kafka250.clients.producer
org.apache.kafka251.clients.producer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接