【问题标题】:slf4j configuration to log a single fileslf4j 配置记录单个文件
【发布时间】:2018-02-13 12:11:10
【问题描述】:

logback.spring.xml 配置为仅登录单个类

<logger name="classname">
        <appender-ref ref="AUDIT_LOG"/>
</logger>

在课堂上只有 1 个记录调用。但是当我查看创建的日志文件时,有 40 000 多行废话。有我想要的 1 行,但其他 40 000 行不应该在那里。

我必须如何配置 logback 以确保日志文件只包含 1 个 log invcation 而没有其他内容?

 <appender name="AUDIT_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_PATH}/audit/audit.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
            <fileNamePattern>${LOG_PATH}/audit/audit.%i.log.gz</fileNamePattern>
            <minIndex>1</minIndex>
            <maxIndex>10</maxIndex>
        </rollingPolicy>
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <maxFileSize>10MB</maxFileSize>
        </triggeringPolicy>
        <encoder>
            <charset>utf-8</charset>
            <Pattern>${FILE_LOG_PATTERN}</Pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
</appender>

【问题讨论】:

  • 请提供整个 logback.spring.xml
  • AUDIT_LOG appender 被配置为接受由classname 发出的日志事件,但它也被配置为接受所有级别为INFO 的日志,所以大概“40 000 + 行废话”是应用程序中其他类发出的 INFO 级别事件。
  • 40 000 + 行中的大多数是调试、跟踪、错误等。过滤器信息实际上删除了大部分。但它不可能是正确的,它仍然得到休眠的 i.StatisticalLoggingSessionEventListener 日志。

标签: java spring logging logback slf4j


【解决方案1】:

听起来您希望将 AUDIT_LOG 保留给一个记录器,而用于该记录器。

这条指令...

<logger name="classname">
    <appender-ref ref="AUDIT_LOG"/>
</logger>

... 将来自classname 记录器的日志事件定向到AUDIT_LOG,但它不会阻止该附加程序处理其他日志事件。

如果你想确保AUDIT_LOG appender 只处理特定记录器的事件,那么你可以使用EvaluatorFilter

这是一个使用 Logback 的 JaninoEventEvaluator 的示例:

<appender name="AUDIT_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <!-- this filter will accept all log events having the logger name "classname" -->
    <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
        <evaluator>
            <expression>return logger.equals("classname");</expression>
        </evaluator>
        <OnMismatch>DENY</OnMismatch>
        <OnMatch>NEUTRAL</OnMatch>
    </filter>

    <file>${LOG_PATH}/audit/audit.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
        <fileNamePattern>${LOG_PATH}/audit/audit.%i.log.gz</fileNamePattern>
        <minIndex>1</minIndex>
        <maxIndex>10</maxIndex>
    </rollingPolicy>
    <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
        <maxFileSize>10MB</maxFileSize>
    </triggeringPolicy>
    <encoder>
        <charset>utf-8</charset>
        <Pattern>${FILE_LOG_PATTERN}</Pattern>
    </encoder>
</appender>

注意:求值表达式是一个 ...

返回布尔值作为评估标准的任意 Java 语言块

【讨论】:

  • 实际上解决这个问题的关键是从根标签中删除它。虽然我被告知它必须在那里,所以我一开始并没有怀疑。
  • @MarkoTaht 这就是为什么你必须分享所有信息,有人会立即告诉你......你应该删除你的问题或更新它,它可能对未来的其他人有用.. . 目前不完整。
  • @Betlista 我无法提供所有代码,因为它可以让我陷入困境,我只能提供小部分。而且我不知道要获得完整的图片需要哪些部分,我以前从未使用过 logback。
  • 确保“AUDIT”附加程序仅接受预期事件的好方法,独立于 logback.xml 的其他部分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-18
  • 2015-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-27
  • 2022-01-11
相关资源
最近更新 更多