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

抽奖系统中 Logback 的日志配置文件说明

logback-spring.xml 这个 XML 文件是 Logback 的日志配置文件,用于 Java 应用(结合 Spring Boot)根据不同环境(开发、测试、生产)配置日志输出策略。下面从整体结构到具体细节进行详细解释

1. 基础配置(根节点 configuration)

<configuration  scan="true" scanPeriod="60 seconds" debug="false">
  • scan="true":开启配置文件自动扫描,当配置文件修改后,Logback 会自动重新加载配置(无需重启应用)。
  • scanPeriod="60 seconds":扫描配置文件变化的间隔时间(这里为 60 秒)。
  • debug="false":是否输出 Logback 自身的调试日志(false表示不输出,避免干扰应用日志)。

2. 按环境区分配置(springProfile 标签)

Logback 结合 Spring Boot 的spring.profiles.active机制,通过springProfile标签为不同环境(devprodtest)配置不同的日志策略。

2.1 开发环境(dev)配置

    <springProfile name="dev"><!-- 输出到控制台 --><appender name="console" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n%ex</pattern></encoder></appender><root level="info"><appender-ref ref="console" /></root></springProfile>
  • 作用:开发环境下,日志直接输出到控制台(方便开发调试)。

  • 核心组件

    • appender(日志输出器)

      • name="console":给输出器命名(唯一标识)。
      • class="ConsoleAppender":指定输出器类型为 “控制台输出”。
      • encoder(编码器):定义日志的格式和编码。
        • pattern(日志格式):
          • %d{HH:mm:ss}:日志时间(时分秒)。
          • [%thread]:当前线程名。
          • %-5level:日志级别(左对齐,占 5 个字符,如INFO ERROR)。
          • %logger{36}:日志所属的类名(最多显示 36 个字符,避免过长)。
          • %msg:日志消息内容。
          • %n:换行。
          • %ex:异常堆栈信息(如果有异常)。
    • root(根日志器)

      • level="info":定义日志输出的级别(info及以上级别日志会被处理,info以下的debugtrace会被忽略)。
      • appender-ref:引用名为console的输出器,即 “将符合级别的日志通过 console 输出器输出”。

2.2 生产 / 测试环境(prod / test)配置

<springProfile name="prod,test"><!-- 定义日志路径、应用名等变量 --><property name="logback.logErrorDir" value="/root/lottery-system/logs/error"/><property name="logback.logInfoDir" value="/root/lottery-system/logs/info"/><property name="logback.appName" value="lotterySystem"/><contextName>${logback.appName}</contextName><!-- ERROR级别日志配置 --><appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">...</appender><!-- INFO级别日志配置 --><appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">...</appender><root level="info"><appender-ref ref="fileErrorLog" /><appender-ref ref="fileInfoLog"/></root>
</springProfile>
  • 作用:生产和测试环境下,日志按级别输出到不同文件,并自动归档(避免日志文件过大或占用过多磁盘空间)。
  • tip:下面的文件路径根据自己云服务器的配置改写
(1)变量定义(property标签)
  • logback.logErrorDir:ERROR 级别日志的存储目录(/root/lottery-system/logs/error)。
  • logback.logInfoDir:INFO 级别日志的存储目录(/root/lottery-system/logs/info)。
  • logback.appName:应用名称(lotterySystem),用于区分不同应用的日志。
  • contextName:设置 Logback 的上下文名称(关联应用名,便于多应用日志区分)。
(2)ERROR 级别日志输出器(fileErrorLog
<appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- 当前日志文件路径(当天的ERROR日志) --><File>${logback.logErrorDir}/error.log</File><!-- 过滤器:只保留ERROR级别日志 --><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>ERROR</level><onMatch>ACCEPT</onMatch> <!-- 匹配ERROR级别时,接受日志 --><onMismatch>DENY</onMismatch> <!-- 不匹配时,拒绝日志 --></filter><!-- 滚动策略(日志归档规则) --><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!-- 归档文件命名格式(按日期拆分) --><FileNamePattern>${logback.logErrorDir}/error.%d{yyyy-MM-dd}.log</FileNamePattern><maxHistory>14</maxHistory> <!-- 保留最近14天的归档日志, older日志自动删除 --><!-- <totalSizeCap>1GB</totalSizeCap> --> <!-- 可选:日志总大小上限(超过后删除旧日志) --></rollingPolicy><!-- 日志格式编码 --><encoder><charset>UTF-8</charset> <!-- 字符编码(避免中文乱码) --><pattern>%d [%thread] %-5level %logger{36} %line - %msg%n%ex</pattern></encoder>
</appender>
  • 核心说明
    • RollingFileAppender:滚动文件输出器,支持日志文件自动拆分和归档(避免单个文件过大)。
    • File:当前正在写入的日志文件(当天的 ERROR 日志会写入error.log)。
    • filter(级别过滤器):通过LevelFilter确保只有ERROR级别日志会被该输出器处理(其他级别如INFOWARN会被拒绝)。
    • rollingPolicy(滚动策略)
      • TimeBasedRollingPolicy:按时间拆分日志(这里按 “天” 拆分)。
      • FileNamePattern:归档文件命名规则(如error.2025-08-03.log表示 2025 年 8 月 3 日的 ERROR 日志)。
      • maxHistory:控制日志保留时长(14 天),避免磁盘被旧日志占满。
    • encoder
      • charset="UTF-8":强制 UTF-8 编码,解决中文日志乱码问题。
      • pattern:比开发环境多了%line(日志所在代码行号),便于定位问题。
(3)INFO 级别日志输出器(fileInfoLog
<appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- 当前日志文件路径(当天的INFO日志) --><File>${logback.logInfoDir}/info.log</File><!-- 自定义过滤器:只保留INFO级别日志 --><filter class="com.example.lotterysystem.common.filter.InfoLevelFilter"/><!-- 滚动策略(与ERROR日志类似) --><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><FileNamePattern>${logback.logInfoDir}/info.%d{yyyy-MM-dd}.log</FileNamePattern><maxHistory>14</maxHistory></rollingPolicy><!-- 日志格式编码(与ERROR日志相同) --><encoder><charset>UTF-8</charset><pattern>%d [%thread] %-5level %logger{36} %line - %msg%n%ex</pattern></encoder>
</appender>
  • 核心说明
    • fileErrorLog的区别在于过滤器:使用自定义过滤器InfoLevelFilter(全限定类名com.example.lotterysystem.common.filter.InfoLevelFilter),作用是只保留INFO级别日志(拒绝WARNERROR等其他级别,确保info.log中只有 INFO 日志)。
    • 其他配置(滚动策略、格式)与fileErrorLog一致,确保日志按天归档,保留 14 天。
(4)根日志器(root
<root level="info"><appender-ref ref="fileErrorLog" /><appender-ref ref="fileInfoLog"/>
</root>
  • level="info":定义日志输出级别为info及以上(infowarnerror)。
  • 同时引用fileErrorLogfileInfoLog两个输出器:
    • ERROR级别日志会被fileErrorLog处理(写入 ERROR 目录)。
    • INFO级别日志会被fileInfoLog处理(写入 INFO 目录)。
    • WARN级别日志会被两个过滤器同时拒绝,因此不会输出,这是由过滤器逻辑决定的)。

三、总结

该配置文件通过 Spring 环境隔离(springProfile),实现了日志的 “环境差异化管理”:

  • 开发环境(dev:日志输出到控制台,格式简洁,便于实时调试。
  • 生产 / 测试环境(prod,test:日志按级别(INFO/ERROR)分离到不同文件,自动按天归档并保留 14 天,既保证了日志的可追溯性,又避免了磁盘空间浪费。

这种配置符合实际开发需求:开发时注重便捷性,生产时注重规范性和可管理性。

http://www.dtcms.com/a/313347.html

相关文章:

  • 03.一键编译安装Redis脚本
  • 【MySQL】MySQL 中的数据排序是怎么实现的?
  • 深入理解流式输出:原理、应用与大模型聊天软件中的实现
  • 跨语言模型中的翻译任务:XLM-RoBERTa在翻译任务中的应用
  • python---python中的内存分配
  • AI Agent 重塑产业发展新格局
  • 联想笔记本安装系统之后一直转圈圈的问题了?无法正常进入到系统配置界面,原来是BIOS中的VMD问题
  • Autoswagger:揭露隐藏 API 授权缺陷的开源工具
  • 使用CMake构建项目的完整指南
  • [LINUX操作系统]shell脚本之循环
  • 【Qt】QObject::startTimer: Timers cannot be started from another thread
  • 如何玩转 Kubernetes K8S
  • 【QT】概述
  • 快速搭建一个非生产k8s环境
  • Android 之 网络通信(HTTP/TCP/UDP/JSON)
  • 量子物理学的前沿意义虚无、形式混乱
  • 入门MicroPython+ESP32:ESP32链接WIFI全攻略
  • Dify中自定义工具类的类型
  • 多模态后训练反常识:长思维链SFT和RL的协同困境
  • GitLab 代码管理平台部署及使用
  • CCF-GESP 等级考试 2025年6月认证C++一级真题解析
  • 扩散模型(一)——综述
  • 介绍JAVA语言、介绍greenfoot 工具
  • 案例介绍|JSON数据格式的转换|pyecharts模块简介
  • noob靶机复现笔记
  • 纯JavaScript实现文本选择工具栏:功能详解与源码解析
  • RAG 知识库实战指南:基于 Spring AI 构建 AI 知识问答应用
  • Git用法记录
  • UE5的渲染Debug技巧
  • C语言字符串拷贝的三重境界:从下标到指针的华丽变身