java - Logback 记录器记录两次

标签 java slf4j 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>

这将避免在根记录器中再次记录它。阅读 logback 配置文档以获取更多信息。

关于java - Logback 记录器记录两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24180772/

相关文章:

java - 为 OpenGL ES 设置 ViewPort - Android

java - 是否有 API 可以修补 POJO?

java - AES 加密是否因语言而异?

java - Logback 中基于时间的文件夹删除

java - Logback 不写入第 3 方日志服务

java - log4j 和 slf4j 在单个项目中 - 这是一个好主意吗?

java - Logback 找不到资源 logback.xml

java - Glassfish-5 中的 Set-Cookie header : folding several cookies in one header not working on Firefox (https + HTTP/2. 0)

java - Logback 不会在 Spring Boot 的 @ExceptionHandler 中记录 ConstraintViolationException

java - logback.groovy 在 1.2.9+ 中被丢弃是否有原因?