Log4j配置

发布于 2025-01-02 15:45:32 字数 1257 浏览 1 评论 0原文

我的项目中有两个附加程序:文件和控制台。我想将我的应用程序配置为按如下方式执行:

所有名为“my.app.*”的记录器:

1. log events DEBUG and higher to fileA
2. log events DEBUG and higher to fileB

所有其他记录器:

1. log events WARN and higher to fileA
2. log events DEBUG and higher to fileB

理想情况下,配置如下所示:

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="fileA" class="org.apache.log4j.FileAppender">
    <!-- configuration -->
</appender>

<appender name="fileB" class="org.apache.log4j.FileAppender">
    <!-- configuration -->
</appender>

<logger name="my.app" additivity="false">
    <level="DEBUG"/>
    <appender-ref ref="fileA"/>
</logger>

<logger name="" additivity="true">
    <level="DEBUG"/>
    <appender-ref ref="fileB"/>
</logger>

<root>
    <level="WARN"/>
    <appender-ref ref="fileA"/>
</root>
</log4j>

但是,此设置会导致名为“my.app”的记录器仅记录到控制台,而所有其他记录器在出现 WARN 及以上情况时记录到控制台。本质上, 被忽略。是否有另一种方法可以使用 log4j 模拟这种行为?

附言。我对糟糕的格式表示歉意,今晚真的很难让它发挥作用:/

I have two appenders, file and console, in my project. I would like to configure my application to perform as such:

all loggers with name "my.app.*":

1. log events DEBUG and higher to fileA
2. log events DEBUG and higher to fileB

all other loggers:

1. log events WARN and higher to fileA
2. log events DEBUG and higher to fileB

Ideally, the configuration would look something like this:

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="fileA" class="org.apache.log4j.FileAppender">
    <!-- configuration -->
</appender>

<appender name="fileB" class="org.apache.log4j.FileAppender">
    <!-- configuration -->
</appender>

<logger name="my.app" additivity="false">
    <level="DEBUG"/>
    <appender-ref ref="fileA"/>
</logger>

<logger name="" additivity="true">
    <level="DEBUG"/>
    <appender-ref ref="fileB"/>
</logger>

<root>
    <level="WARN"/>
    <appender-ref ref="fileA"/>
</root>
</log4j>

However, this setup causes loggers named "my.app" to only log to console, and all other loggers to log to console on WARN and above. Essentially, <logger name=""> is being ignored. Is there another way to emulate this behavior with log4j?

PS. I apologize for the poor formatting, really struggling to get this to work tonight :/

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

┈┾☆殇 2025-01-09 15:45:32

您需要:

<logger name="my.app" additivity="false">
    <level="DEBUG"/>
    <appender-ref ref="console"/>
    <appender-ref ref="file"/>
</logger>

<root>
    <appender-ref ref="console-warn"/>
    <appender-ref ref="file-debug"/>
</root>

对于根附加程序,您需要两个新的控制台/文件附加程序,它们具有所需的级别限制。

<appender name="file-debug" class="org.apache.log4j.FileAppender">
    <param name="Threshold" value="DEBUG"/>
</appender>

<appender name="console-warn" class="org.apache.log4j.ConsoleAppender">
    <param name="Threshold" value="WARN"/>
</appender>

You need:

<logger name="my.app" additivity="false">
    <level="DEBUG"/>
    <appender-ref ref="console"/>
    <appender-ref ref="file"/>
</logger>

<root>
    <appender-ref ref="console-warn"/>
    <appender-ref ref="file-debug"/>
</root>

For the root-appender you need two new console/file appenders, that have the desired level restrictions.

<appender name="file-debug" class="org.apache.log4j.FileAppender">
    <param name="Threshold" value="DEBUG"/>
</appender>

<appender name="console-warn" class="org.apache.log4j.ConsoleAppender">
    <param name="Threshold" value="WARN"/>
</appender>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文