Logback logger记录两次

我想在我的应用程序中使用slf4j + logback用于两个目的 – 日志和审计。

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

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

对于Audit,我创建了一个特殊的命名记录器并记录到它:

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

logback配置:

    %d{HH:mm:ss.SSS}|%msg%n        %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n     

问题:通过审计记录器记录的消息出现两次 – 一次在AUDIT_LOGGER下,一次在根记录器下。

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

14:41:57.978 | 1 | 10 |欢迎来到主

14:41:57.978 [主要] INFO AUDIT_LOGGER – 1 | 10 |欢迎来到主页

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

更改审核记录器定义,如下所示。 注意记录器定义中的additivity="false"标志。

    %d{HH:mm:ss.SSS}|%msg%n     

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