当前位置: 首页 > 知识库问答 >
问题:

日志记录多个记录器不符合级别

董子航
2023-03-14
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true">

    <jmxConfigurator />

    <appender name="ROOT_FILE_APPENDER"
        class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder class="net.logstash.logback.encoder.LogstashEncoder">
            <fieldNames>
                <timestamp>timestamp</timestamp>
                <version>[ignore]</version>
                <levelValue>[ignore]</levelValue>
            </fieldNames>
        </encoder>
        <file>root.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>root.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
            <maxFileSize>$100MB</maxFileSize>
            <totalSizeCap>1GB</totalSizeCap>
            <maxHistory>7</maxHistory>
        </rollingPolicy>
    </appender>

    <appender name="basic-text" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <pattern>%X{Logging-CorrelationId} %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
        <file>text.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>text.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
            <maxFileSize>100MB</maxFileSize>
            <totalSizeCap>1GB</totalSizeCap>
            <maxHistory>7</maxHistory>
        </rollingPolicy>
    </appender>

    <root level="ERROR">
        <appender-ref ref="ROOT_FILE_APPENDER" />
    </root>

    <logger name="it.pkg.testpkg.service" additivity="true" level="INFO">
        <appender-ref ref="basic-text"/>
    </logger>

</configuration>
private static final Logger LOGGER = LoggerFactory.getLogger(it.pkg.testpkg.service.EchoService.class);

现在,问题是,当我以以下方式进行日志记录时:

LOGGER.info("Test Log");

尽管根记录器级别被设置为“错误”,但日志条目仍然存在于两个日志文件中。然而,当我去掉“it.pkg.testpkg.service”记录器(通过注释或删除它)时,条目停止进入根记录器。我不太清楚这是怎么回事。

目前,我已经找到了一个临时解决方案,方法是在“root_file_appender”中添加以下条目:

<filter class="ch.qos.logback.classic.filter.LevelFilter">
     <level>ERROR</level>
     <onMatch>ACCEPT</onMatch>
     <onMismatch>DENY</onMismatch>
</filter>
<dependency>
    <groupId>net.logstash.logback</groupId>
    <artifactId>logstash-logback-encoder</artifactId>
    <version>4.7</version>
</dependency>

<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-access</artifactId>
    <version>1.1.7</version>
</dependency>

<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.1.7</version>
</dependency>
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-core</artifactId>
    <version>1.1.7</version>
</dependency>

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>jcl-over-slf4j</artifactId>
    <version>1.7.21</version>
</dependency>

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.21</version>
</dependency>

谢了。

共有1个答案

白淇
2023-03-14

通过可加性达到的祖先记录器的行为跳过日志级别检查。

如果记录器

<logger name="it.pkg.testpkg.service" additivity="true" level="INFO">
    <appender-ref ref="basic-text"/>
</logger>

接受log语句

LOGGER.info("Test Log");
<logger name="it.pkg.testpkg.service" additivity="false" level="INFO">
    <appender-ref ref="basic-text"/>
    <appender-ref ref="ROOT_FILE_APPENDER" />
</logger>
 类似资料:
  • 我想在我的应用程序中使用SLF4J+logback用于两个目的--日志和审计。 14:41:57.978[main]信息AUDIT_LOGGER-110欢迎使用main 如何确保审核消息在审核记录器下只出现一次?

  • 我使用的是播放框架,其中日志是默认的记录器引擎。为了便于跟踪,我希望将两个不同的活动(和)记录在两个单独的文件中。为此,我有两个追加器和两个记录器。每个记录器都用特定的appender标记。 我希望通过事务记录器(如登录或注册相关活动(如 但不管用。有什么想法吗? 我所说的“不工作”是指相同的日志被附加到两个记录器中,而不是特定于特定的日志。例如。如果我从播放代码调用,事务和登录记录器都将用户X已

  • 我想做的很直截了当: 我只希望在控制台追加器上显示重要的消息,而我希望将详细的消息路由到文件追加器。 我还尝试向添加一个ThresholdFilter,但这也不能过滤它。

  • 但是这两条调试消息都记录到DebugAppender,而这两条信息消息都记录到InfoAppender。

  • 互联网上有许多帖子建议如何从logback迁移到log4j2进行Spring引导日志记录。 参考这个sof post-Spring Boot日志与log4j2-我已经配置我的项目使用log4j2。然后我添加了一些基本的log4j2.xml和log4j2.properties文件来测试。 但是在这些更改之后,我的项目无法进行任何日志记录。有人能帮我找出毛病吗? 项目代码可在github-https:

  • 我使用Kubernetes作为cron作业运行python脚本。问题是,直到作业完成后,我才看到脚本的输出(可能需要一段时间才能运行)。我怀疑这是由于日志记录级别(--v选项)造成的,但在我的整个生命周期中,我都找不到它的文档(默认为--v=0)。如果我想增加输出内容的详细程度,是否有人知道“INFO”或“TRACE”的值(或者这些值是什么/定义在哪里)?提前谢谢你的帮助。 编辑:是否有人在Kub