这些是我的 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 父记录器,这是可行的。任何人都可以解释为什么这不起作用。
答案 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 将获取所有日志事件。但该配置似乎与您在示例中显示的相匹配。