示例

<?xml version="1.0" encoding="UTF-8" ?>
<configuration scan="true" scanPeriod="10 minutes">
   <appender name="stdot" class="ch.qos.logback.core.ConsoleAppender">
       <layout class="ch.qos.logback.classic.PatternLayout">
           <pattern>%d{yyyy-MM-dd HH:mm:ss,GMT+8} [%p][%c][%M][%L]-> %m%n</pattern>
       </layout>
   </appender>
   <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
       <file>easysession.log</file>
       <encoder>
           <charset>utf-8</charset>
           <pattern>%d{yyyy-MM-dd HH:mm:ss,GMT+8} [%p][%c][%M][%L]-> %m%n</pattern>
       </encoder>
       <append>false</append>
       <prudent>false</prudent>
   </appender>

   <root level="info">
       <appender-ref ref="stdot"/>
       <appender-ref ref="file"/>
   </root>
</configuration>

解析

这个 logback-spring.xml 配置文件定义了 Logback 日志框架的行为,主要包括日志的输出格式、输出目标以及日志级别等。以下是对配置的详细解析:


1. 全局配置

<configuration scan="true" scanPeriod="10 minutes">
  • scan="true":启用配置文件的热更新功能。如果配置文件被修改,Logback 会自动重新加载配置。
  • scanPeriod="10 minutes":设置配置文件扫描的时间间隔为 10 分钟。

2. 控制台日志输出(stdot Appender)

<appender name="stdot" class="ch.qos.logback.core.ConsoleAppender">
    <layout class="ch.qos.logback.classic.PatternLayout">
        <pattern>%d{yyyy-MM-dd HH:mm:ss,GMT+8} [%p][%c][%M][%L]-> %m%n</pattern>
    </layout>
</appender>
  • name="stdot":定义了一个名为 stdot 的日志输出目标(Appender)。
  • class="ch.qos.logback.core.ConsoleAppender":指定日志输出到控制台。
  • <pattern>:定义日志的输出格式:
    • %d{yyyy-MM-dd HH:mm:ss,GMT+8}:日志时间,格式为 年-月-日 时:分:秒,时区为 GMT+8。
    • [%p]:日志级别(如 INFODEBUG 等)。
    • [%c]:日志所属的类名。
    • [%M]:输出日志的方法名。
    • [%L]:输出日志的代码行号。
    • %m:日志消息内容。
    • %n:换行符。

3. 文件日志输出(file Appender)

<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>easysession.log</file>
    <encoder>
        <charset>utf-8</charset>
        <pattern>%d{yyyy-MM-dd HH:mm:ss,GMT+8} [%p][%c][%M][%L]-> %m%n</pattern>
    </encoder>
    <append>false</append>
    <prudent>false</prudent>
</appender>
  • name="file":定义了一个名为 file 的日志输出目标(Appender)。
  • class="ch.qos.logback.core.rolling.RollingFileAppender":指定日志输出到文件,并支持文件滚动(按时间或大小分割)。
  • <file>easysession.log</file>:指定日志文件名为 easysession.log
  • <encoder>:定义日志的输出格式:
    • <charset>utf-8</charset>:指定日志文件的字符编码为 UTF-8。
    • <pattern>:日志格式与控制台输出一致。
  • <append>false</append>:每次启动应用时,清空日志文件(不追加)。
  • <prudent>false</prudent>:禁用多进程安全模式(如果多个进程同时写入同一个日志文件,需设置为 true)。

4. 全局日志级别配置

<root level="info">
    <appender-ref ref="stdot"/>
    <appender-ref ref="file"/>
</root>
  • <root level="info">:设置全局日志级别为 INFO,即只输出 INFO 级别及以上的日志(如 WARNERROR)。
  • <appender-ref ref="stdot"/>:将控制台日志输出(stdot)添加到全局日志配置中。
  • <appender-ref ref="file"/>:将文件日志输出(file)添加到全局日志配置中。

5. 总结

这个配置文件主要实现了以下功能:

  1. 控制台日志输出
    • 日志格式包含时间、日志级别、类名、方法名、行号和日志内容。
    • 时区为 GMT+8。
  2. 文件日志输出
    • 日志输出到 easysession.log 文件。
    • 每次启动应用时清空日志文件。
    • 日志格式与控制台一致。
  3. 全局日志级别
    • 设置为 INFO,只输出 INFO 级别及以上的日志。
    • 日志同时输出到控制台和文件。

6. 改进建议

  • 文件滚动策略:当前配置没有定义文件滚动策略(如按时间或大小分割),建议添加 <rollingPolicy> 配置,避免日志文件过大。
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>easysession.%d{yyyy-MM-dd}.log</fileNamePattern>
        <maxHistory>30</maxHistory>
    </rollingPolicy>
    
  • 多环境配置:可以通过 <springProfile> 标签实现不同环境的差异化配置。
    <springProfile name="dev">
        <root level="DEBUG">
            <appender-ref ref="stdot"/>
        </root>
    </springProfile>
    <springProfile name="prod">
        <root level="INFO">
            <appender-ref ref="file"/>
        </root>
    </springProfile>
    
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐