当前位置: 首页 > 面试题库 >

Logback记录器记录两次

盖翰池
2023-03-14
问题内容

我想在我的应用程序中将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]调试com.gammay.example.Main–> main()

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

14:41:57.978 [main] INFO AUDIT_LOGGER-1 | 10 |欢迎来到main

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


问题答案:

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

<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配置文档以获取更多信息。



 类似资料:
  • 我想在我的应用程序中使用SLF4J+logback用于两个目的--日志和审计。 14:41:57.978[main]信息AUDIT_LOGGER-110欢迎使用main 如何确保审核消息在审核记录器下只出现一次?

  • 附加器 和3个记录器: 记录器1 null

  • 我还希望com.mypack的级别“trace”与“info”的行为方式相同。到目前为止,我还没有取得任何成功。我需要像这样的东西 感谢你的帮助。

  • 我使用的是JBoss,因此需要排除JBoss自己的日志子系统,以便进行日志记录,我使用的是jboss-deployment-structure.xml文件: 我使用的是JPA,因此如果这可能有所帮助,这是我的persistence.xml文件:

  • 假设我有一个输入文件,在HDFS中为这个文件创建了三个块。假设我有三个数据节点,每个数据节点存储一个块。如果我有3个输入拆分,则3个映射器将并行运行,以处理各自数据节点的本地数据。每个映射器使用输入格式和记录读取器以键值对的形式获取输入。此场景使用TextInputFormat,其中记录是来自文件的完整文本行。 这里的问题是,如果在第一个块的末尾有记录中断,会发生什么。 1)Hadoop如何读取此