当前位置: 首页 > article >正文

logback希望特定的error日志写入到特定文件

1、增加appender

加了过滤器,限定只记录ERROR级别日志 。

<appender name="hzxAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${hzx_LOG_FILE}</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${hzx_LOG_FILE}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>200MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <totalSizeCap>2GB</totalSizeCap>
            <MaxHistory>15</MaxHistory>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
        <append>true</append>
        <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayout">
            <Pattern>${LOG_PATTERN}</Pattern>
        </layout>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

 2、限定只在 local环境下记录

且additivity = false,此时该日志将不会写入到其他文件。

<!-- 本地 -->
    <springProfile name="local">
        <root level="INFO">
            <appender-ref ref="CONSOLE"/>
            <appender-ref ref="applicationAppender"/>
            <appender-ref ref="errorAppender"/>
        </root>
        <logger name="hzxLogger" level="ERROR" additivity="false">
            <appender-ref ref="hzxAppender"/>
        </logger>
    </springProfile>

3、代码中使用logger

@RestController
@Slf4j(topic = "hzxLogger")
public class TestController {

扩展知识:

1、可以看到<logger name="hzxLogger" level="ERROR" additivity="false"> 同时 <appender name="hzxAppender"  中也配置 <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>  只过滤error级别的,是否存在重复配置。

1. 两者的作用机制

a. ​Logger 的 level="ERROR"
  • 作用层级:在 Logger 级别过滤。
  • 效果:只有 ​ERROR 及以上级别 的日志事件会进入该 Logger,低于 ERROR 的日志(如 INFO、WARN)会被直接丢弃,不会传递给任何 Appender。
b. ​Appender 的 LevelFilter
  • 作用层级:在 Appender 级别过滤。
  • 效果:即使日志事件通过了 Logger 的级别过滤,LevelFilter 会再次检查级别:
    • ACCEPT ERROR 级别的日志。
    • DENY 非 ERROR 级别的日志(但此时这些日志已经通过 Logger 的 level="ERROR" 过滤,实际不会到达这里)。

2. 是否冗余?

  • 在当前的配置中,这两个过滤是冗余的

    • 由于 Logger 的 level="ERROR" 已经确保只有 ERROR 级别的日志能进入 Appender,Appender 的 LevelFilter 实际上 ​永远不会遇到非 ERROR 日志,因此 <onMismatch>DENY</onMismatch> 是多余的。
  • 特殊情况

    • 如果 Logger 的 level 设置为低于 ERROR(如 INFO),则 Appender 的 LevelFilter 是必要的,用于进一步过滤出 ERROR 日志。
    • 如果 Logger 的 additivity="true"(默认值),日志事件可能从父 Logger 传递过来,此时 LevelFilter 可能有意义。但你的配置中 additivity="false",因此无需考虑这种情况。
  • Logger 的 level 和 ​Appender 的 LevelFilter 可以同时存在,但需根据场景决定是否需要双重过滤。
  • 在大多数情况下,优先使用 ​Logger 级别过滤,保持配置简洁高效。


http://www.kler.cn/a/584512.html

相关文章:

  • 开源工具利器:Mermaid助力知识图谱可视化与分享
  • 海外服务器的网络带宽该如何进行选择?
  • Android/AOSP源码编译错误:TEMPORARY_DISABLE_PATH_RESTRICTIONS
  • 算法-字母异位词分组
  • Android 中临时文件存放路径选择
  • MOEFeedForward 模块
  • DeepSeek模型本地化部署方案及Python实现
  • ArcGIS Pro 车牌分区数据处理与地图制作全攻略
  • CMOS电平标准详解
  • JAVA面试_进阶部分_Ibatis与Hibernate的区别
  • STM32第一天建立工程
  • 医疗APP开发如何实现跨机构数据互通
  • Html5记忆翻牌游戏开发经验分享
  • c++介绍函数指针 十
  • 智享三代实景无人直播:实景呈现+智能互动,以科技之力稳抓流量与商机
  • Oracle中In和Exists区别分析
  • 56.HarmonyOS NEXT 登录模块开发教程(十):总结与展望
  • Redis中常见的问题
  • Chrome 扩展开发API实战:Runtime(八)
  • 自然语言处理:文本聚类