简体   繁体   English

log4j2中的自定义日志级别问题

[英]Custom log level issue in log4j2

Root logger is configured to be a synchronous logger at INFO level. 根记录器配置为INFO级别的同步记录器。 I also have a couple of Async loggers. 我也有几个异步记录器。 One of the Async logger is configured at a customized higher log level TOAST (789). 其中一个异步记录器配置为自定义的更高日志级别TOAST (789)。 This is higher than the TRACE level (600). 这高于TRACE水平(600)。

The reason for doing this is to have a log level that can be used for special events to be logged via Async logger and their own appenders. 这样做的原因是具有可用于通过异步记录器和它们自己的appender记录的特殊事件的日志级别。

We dont want the TOAST events to be going to the Synchronous Root loggers or other loggers.. but only to the Async TOAST logger and its corresponding appenders .. is it possible? 我们不希望TOAST事件转到同步根记录器或其他记录器......但仅限于Async 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>

It sounds to me like you really want a named logger not a custom level because you only ever want your messages to go to one logger and its appenders. 这听起来像你真的想要一个命名的记录器而不是自定义级别,因为你只希望你的消息转到一个记录器及其appender。 Perhaps you should use something more like: 也许你应该使用更像的东西:

<AsyncLogger name="TOAST_LOGGER" level=“INFO” includeLocation="true">
    <AppenderRef ref="Rewrite" />
</AsyncLogger>

and then in your code 然后在你的代码中

private static final Logger TOAST_LOGGER = LogManager.getLogger("TOAST_LOGGER");
...
TOAST_LOGGER.info("Toast message");
...

Otherwise, if you must use a custom log level then you can accomplish what you want by filtering with a Threshold Filter . 否则,如果必须使用自定义日志级别,则可以通过使用阈值过滤器进行过滤来完成所需的操作。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM