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

抽奖系统中 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.xdnf.cn/news/16913.html

相关文章:

  • Easy系列PLC相对运动指令实现定长输送(ST源代码)
  • 长文:Java入门教程
  • 求定积分常用技巧
  • 前端工程化:npmvite
  • 小红书开源dots.ocr:单一视觉语言模型中的多语言文档布局解析
  • CUDA杂记--nvcc使用介绍
  • k8s黑马教程笔记
  • MySQL 索引失效的场景与原因
  • 第二章 矩阵
  • Apple基础(Xcode④-Flutter-Platform Channels)
  • OpenCV轻松入门_面向python(第一章OpenCV入门)
  • 【PDF + ZIP 合并器:把ZIP文件打包至PDF文件中】
  • RabbitMQ面试精讲 Day 8:死信队列与延迟队列实现
  • 反向代理+网关部署架构
  • Flask ORM 模型(轻松版)
  • 如何在不停机的情况下,将MySQL单库的数据迁移到分库分表的架构上?
  • Unity_数据持久化_IXmlSerializable接口
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘scikit-learn’问题
  • ESP32学习-I2C(IIC)通信详解与实践
  • Azure DevOps — Kubernetes 上的自托管代理 — 第3部分
  • GB 44496-2024《汽车软件升级通用技术要求》对行业从业者的变革性影响
  • 13-day10生成式任务
  • 从Docker衔接到导入黑马商城以及前端登录显示用户或密码错误的相关总结(个人理解,仅供参考)
  • 【AI编程工具IDE/CLI/插件专栏】-国外IDE与Cursor能力对比
  • 【openlayers框架学习】九:openlayers中的交互类(select和draw)
  • 【LLM】 BaseModel的作用
  • MySQL面试题及详细答案 155道(021-040)
  • Spring Cloud微服务中的内存泄漏问题定位与解决方案
  • SelectDB数据库,新一代实时数据仓库的全面解析与应用
  • Linux 环境下 Docker 安装与简单使用指南