log4j2 中的自定义日志级别问题
Custom log level issue in log4j2
根记录器配置为 INFO
级别的同步记录器。我还有几个异步记录器。其中一个异步记录器配置为自定义的更高日志级别 TOAST
(789)。这高于 TRACE
水平 (600)。
这样做的原因是为了拥有一个日志级别,该级别可用于通过异步记录器及其自己的附加程序记录的特殊事件。
我们不希望 TOAST
事件进入同步根记录器或其他记录器..但只进入异步 TOAST
记录器及其相应的附加程序..这可能吗?
<?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>
在我看来你真的想要一个命名记录器而不是自定义级别,因为你只希望你的消息发送到一个记录器及其附加程序。也许你应该使用更像:
<AsyncLogger name="TOAST_LOGGER" level=“INFO” includeLocation="true">
<AppenderRef ref="Rewrite" />
</AsyncLogger>
然后在您的代码中
private static final Logger TOAST_LOGGER = LogManager.getLogger("TOAST_LOGGER");
...
TOAST_LOGGER.info("Toast message");
...
否则,如果您必须使用自定义日志级别,那么您可以通过 filtering with a Threshold Filter 来完成您想要的。
根记录器配置为 INFO
级别的同步记录器。我还有几个异步记录器。其中一个异步记录器配置为自定义的更高日志级别 TOAST
(789)。这高于 TRACE
水平 (600)。
这样做的原因是为了拥有一个日志级别,该级别可用于通过异步记录器及其自己的附加程序记录的特殊事件。
我们不希望 TOAST
事件进入同步根记录器或其他记录器..但只进入异步 TOAST
记录器及其相应的附加程序..这可能吗?
<?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>
在我看来你真的想要一个命名记录器而不是自定义级别,因为你只希望你的消息发送到一个记录器及其附加程序。也许你应该使用更像:
<AsyncLogger name="TOAST_LOGGER" level=“INFO” includeLocation="true">
<AppenderRef ref="Rewrite" />
</AsyncLogger>
然后在您的代码中
private static final Logger TOAST_LOGGER = LogManager.getLogger("TOAST_LOGGER");
...
TOAST_LOGGER.info("Toast message");
...
否则,如果您必须使用自定义日志级别,那么您可以通过 filtering with a Threshold Filter 来完成您想要的。