1
根记录器被配置为INFO
级别的同步记录器。我也有几个Async记录器。其中一个Async记录器配置在定制的更高日志级别TOAST
(789)。这高于TRACE
的水平(600)。log4j2中的自定义日志级别问题
这样做的原因是让日志级别可用于通过Async Logger和他们自己的appender记录特殊事件。
我们不希望TOAST
事件要进入同步根记录器或其他记录器..但仅限于Async TOAST
记录器及其相应的appender ..是否有可能?
<?xml version="1.0" encoding="UTF-8"?>
<Configuration monitorInterval="120" packages=“com.pack.toast”>
<CustomLevels>
<CustomLevel name=“TOAST” intLevel=“789” />
</CustomLevels>
<Appenders>
<RollingFile fileName="${sys:catalina.base}/logs/packiu.log"
append="true" name="DRFILE"
filePattern="${sys:catalina.base}/logs/packiu-%d{yyyy-MM-dd}-%i.log">
<PatternLayout>
<Pattern>%d [%t] %c %M - %p: %m%n</Pattern>
</PatternLayout>
<Policies>
<OnStartupTriggeringPolicy />
<SizeBasedTriggeringPolicy size="10 MB" />
</Policies>
<DefaultRolloverStrategy max="30" />
</RollingFile>
<RollingFile name="RollingFile" fileName="/Users/toasty/logs/roll_file_app.log"
filePattern="logs/app-%d{MM-dd-yyyy}.log.gz" immediateFlush="true" >
<PatternLayout>
<pattern>%m%n</pattern>
</PatternLayout>
<TimeBasedTriggeringPolicy />
</RollingFile>
<Rewrite name="Rewrite" ignoreExceptions = "true" >
<ToastAppenderPolicy toastNeeded="true">
</ToastAppenderPolicy>
<AppenderRef ref="RollingFile"/>
</Rewrite>
</Appenders>
<Loggers>
<Logger name="net.rubyeye" level="off" />
<Logger name="com.google.code" level="off" />
<AsyncLogger name="com.pack.toast.ToastLoggerImpl" level=“TOAST” includeLocation="true">
<AppenderRef ref="Rewrite" />
</AsyncLogger>
<Root level="info">
<AppenderRef ref="DRFILE" />
</Root>
</Loggers>
</Configuration>
感谢您的Info @ D.B。我完全按照概述完成了命名记录器,但日志消息仍然在两个记录器的输出中结束,不幸的是..(同步根和异步命名记录器)。以下是输出到SYNC记录器的示例 - “2017-04-03 23:04:42,534 [http-nio-8443-exec-1] TOAST_LOGGER log - INFO:blah'。有什么想法吗?没有自定义日志级别,我很好,如果这种方法可以工作。谢谢 – user46743
我相信这可能是由于可加性。请参阅log4j2文档的[additivity](https://logging.apache.org/log4j/2.x/manual/configuration.html#Additivity)部分,并在相应的记录器上将additive设置为false。我想在吐司记录器上将它设置为false应该是足够的,因为它说,“一旦事件到达记录器,其addability设置为false,事件将不会传递到它的任何父记录器,无论它们的可加性设置如何“。 –
谢谢@ D.B。可加性似乎已经解决了值传递给父母的问题。 – user46743