在Log4j2中,如何在不同的文件中附加不同优先级的相同类日志?

时间:2021-03-12 04:19:06

标签: java log4j2

这些是我的 appender 文件-

    <Appenders>
        <File name="FirstLogToFile" fileName="logs/first.log">
            <PatternLayout>
                <Pattern>%r %d %p %c{1.} [%t] %m%n</Pattern>
            </PatternLayout>
        </File>
        <File name="SecondLogToFile" fileName="logs/second.log">
            <PatternLayout>
                <Pattern>%r %d %p %c{1.} [%t] %m%n</Pattern>
            </PatternLayout>
        </File>
    </Appenders>

这些是我的记录器文件-

        <Logger name="com.company.gaurav.Log" level="Fatal" additivity="true">
            <AppenderRef ref="FirstLogToFile"/>
        </Logger>
        <Logger name="com.company.gaurav.Log" level="trace" additivity="true">
            <AppenderRef ref="SecondLogToFile"/>
        </Logger>

我不能附加到 FirstLogToFile,只能附加到 SecondLogToFile。 另一种解决方法是创建一个没有任何单独子记录器的 Root 父记录器,这是可行的。任何人都可以解释为什么这不起作用。

1 个答案:

答案 0 :(得分:1)

不能有两个同名的记录器。 D.B. 的回答是正确的,虽然对你的问题来说有点复杂。如果您需要动态灵活性,我只会使用 RoutingAppender。如果您提前了解您的 appender,最好配置它们。

此外,您可以在不同级别放置过滤器。 D.B. 在 appender 上的链接答案过滤器,如果你想要特定的输出而不考虑记录器,这是合适的。尽管我会像这样将 LevelRangeFilter 添加到 Appender 参考中,但您提出问题的方式是

<Logger name="com.company.gaurav.Log" level="trace" additivity="true">
   <AppenderRef ref="FirstLogToFile">
     <LevelRangeFilter minLevel="FATAL" maxLevel="FATAL" onMatch="ACCEPT" onMismatch="DENY"/>
   </AppenderRef>
   <AppenderRef ref="SecondLogToFile"/>
</Logger>

我还应该指出,我不确定这会满足您的真正需求。使用此配置, FirstLogToFile 附加程序将仅获取致命错误消息,而 SecondLogToFile 将获取所有日志事件。但该配置似乎与您在示例中显示的相匹配。

相关问题