java-Logback记录器记录两次

我想在我的应用程序中将slf4j logback用于两个目的-日志和审计.

对于日志记录,我以常规方式记录:

static final Logger logger = LoggerFactory.getLogger(Main.class);
logger.debug("-> main()");

为了进行审计,我创建了一个特殊的命名记录器并登录到它:

static final Logger logger = LoggerFactory.getLogger("AUDIT_LOGGER");
Object[] params =
    { new Integer(1) /* TenantID */, new Integer(10) /* UserID */, msg};
logger.info("{}|{}|{}", params);

登录配置:

<logger name="AUDIT_LOGGER" level="info">
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS}|%msg%n
            </pattern>
        </encoder>
    </appender>
</logger>

<root level="all">
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
            </pattern>
        </encoder>
    </appender>
</root>

问题:
通过审核记录器记录的消息出现两次-一次在AUDIT_LOGGER下,一次在根记录器下.

14:41:57.975 [main] DEBUG com.gammay.example.Main – -> main()

14:41:57.978|1|10|welcome to main

14:41:57.978 [main] INFO AUDIT_LOGGER – 1|10|welcome to main

如何确保审核消息在审核记录器下仅出现一次?

解决方法:

如下所示更改审核记录器定义.注意记录器定义中的additivity =“ false”标志.

<logger name="AUDIT_LOGGER" level="info" additivity="false">
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS}|%msg%n
            </pattern>
        </encoder>
    </appender>
</logger>

这样可以避免再次在root logger中记录该日志.阅读logback配置文档以获取更多信息.

上一篇:(八)SpringCloud整合zookeeper


下一篇:java-logback配置不适用于spring