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

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 级别过滤,保持配置简洁高效。

相关文章:

  • Qt/C++音视频开发82-系统音量值获取和设置/音量大小/静音
  • leetcode_字符串 49. 字母异位词分组
  • DeepSeek赋能智慧环保:为环境资源保护提供决策支持,开启绿色智能新时代
  • MAVEN解决版本依赖冲突
  • Mybatis 注解(详细版)
  • UE小:UE5.5 PixelStreamingInfrastructure 使用时注意事项
  • 15 | 定义简洁架构 Store 层的数据类型
  • Skyvern AI 实现 浏览器爬虫+自动化工具
  • coze ai assistant Task 2
  • Flash Attention 算法简介
  • Math.NET Numerics 库怎么装
  • 【Linux内核系列】:文件系统
  • 治愈系自媒体运营方案
  • Linux 字符设备驱动实例
  • 第二章:Qt常用界面组件
  • Java程序开发之Spring Boot快速入门:5分钟搭建RESTful API
  • angular中下载接口返回文件
  • Qt的QMenu 和 QAction的样式设置
  • 骑士74CMS_v3.34.0SE版uniapp全开源小程序怎么编译admin和member流程一篇文章说清楚
  • 计算机毕业设计:ktv点歌系统
  • 竞彩湃|欧联杯决赛前,曼联、热刺继续划水?
  • 女子七年后才知银行卡被盗刷18万元,警方抓获其前男友
  • 江西3人拟提名为县(市、区)长候选人
  • 通用汽车回应进口车业务调整传闻:因经济形势变化重组,致力于在中国持续发展
  • 南方降水频繁暴雨连连,北方高温再起或现40°C酷热天气
  • KPL“王朝”诞生背后:AG和联赛一起迈向成熟