Logback的配置文件,你看懂了吗

本文详细介绍了如何通过SpringBoot配置文件和XML自定义Logback配置,包括contextName、property、appender(如CONSOLE、CONSOLE-WITH-COLOR和FILE)的使用,以及日志级别和输出格式的设定。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考文章一
参考文章二
在这里插入图片描述

  • configuration是XML文件根元素。
  • rootlogger可视为同一类,都是日志设置;root是日志的全局设置,而logger可以单独设置某一些包和类的日志输出。
  • appender配置日志格式、如何过滤、文件处理等。
  • propertycontextName元素,分别用来定义变量和应用上下文名称,非必须。

配置Logback的方式:

  1. 通过Spring Boot配置文件配置Logback
  2. 通过XMl文件自定义Logback配置
<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <contextName>logback-spring-demo-dev</contextName>
    <property name="pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg %n"/>
    <property name="pattern-color" value="%yellow(%d{yyyy-MM-dd HH:mm:ss.SSS}) [%thread] %highlight(%-5level) %green(%logger{50}) - %highlight(%msg) %n"/>
    <property name="LOG_HOME" value="logs"/>

    <!-- 控制台输出 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${pattern}</pattern>
        </encoder>
    </appender>

    <!-- 控制台输出-带颜色 -->
    <appender name="CONSOLE-WITH-COLOR" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${pattern-color}</pattern>
        </encoder>
    </appender>

    <!-- 文件输出 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/all.%d.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>10MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <maxHistory>30</maxHistory>
        </rollingPolicy>

        <encoder>
            <pattern>${pattern}</pattern>
        </encoder>
    </appender>


    <root level="INFO">
        <appender-ref ref="CONSOLE-WITH-COLOR"/>
        <appender-ref ref="FILE"/>
    </root>

    <logger name="com.example.logbackdemo.IndexAction" level="info" additivity="false">
        <appender-ref ref="CONSOLE"/>
    </logger>

</configuration>
  • 两种属性:contextNameproperty
  • 三个节点:appenderrootlogger

以下是配置文件的各个部分的详细解释:

  1. <contextName>:定义了日志上下文的名称,这里被设置为logback-spring-demo-dev。这个名称通常用于区分不同的应用或环境。

  2. <property>:定义了一些属性,可以在配置文件中重复使用。在这个配置文件中定义了三个属性:

    • pattern:定义了日志的输出格式,包括时间戳、线程名、日志级别、日志发生的位置和消息。
    • pattern-color:定义了带颜色的日志输出格式,用于控制台输出,以便更容易区分不同级别的日志。
    • LOG_HOME:定义了日志文件的存储目录,这里被设置为logs
  3. <appender>:设置日志渲染效果,name表示该渲染器的名字,class表示使用的输出策略,常见的有控制台输出策略(ConsoleAppender)和文件输出策略(FileAppenderRollingFileAppender)。
    这里配置了三种appender:

    • CONSOLE:标准的控制台输出,使用PatternLayoutEncoderpattern属性来格式化日志。
    • CONSOLE-WITH-COLOR:也是控制台输出,但使用带颜色的pattern-color属性来格式化日志。
    • FILE:定义了文件输出,使用RollingFileAppender,它支持基于时间和文件大小的滚动策略。
      • <rollingPolicy>:是FILE appender的一部分,定义了日志文件的滚动策略:
        • fileNamePattern:定义了滚动日志文件的命名模式。
        • SizeAndTimeBasedFNATP:定义了基于文件大小和时间的触发策略,其中maxFileSize设置了单个文件的最大大小。
        • maxHistory:定义了要保留的最大历史记录天数。
  4. <root>:设置了根日志记录器(全局日志)的级别以及它使用的appender(CONSOLE-WITH-COLORFILE)。

日志级别:ERROR -> WARN -> INFO -> DEBUG

如配置日志级别为INFO,则INFO及以上级别的日志会输出,而比INFO级别低的日志(debug日志)不会被输出。

  1. <logger>:用来设置某一个类或者某个包的日志输出级别、以及关联的appender。additivity设置为false,意味着这个记录器不会将日志事件传递给根记录器。它只使用CONSOLE appender进行日志记录,而不使用带颜色的版本。

总结:这个Logback配置文件定义了日志输出到控制台和文件的方式。它包括了不同的appender,即CONSOLECONSOLE-WITH-COLORFILE。文件输出使用了rollingFileAppender,以按时间滚动的方式记录日志文件。根日志级别被设置为INFO,并指定了输出到控制台的格式。同时,com.example.logbackdemo.IndexAction包的日志级别被设置为INFO,并将其输出到控制台。

<think>好的,我现在要帮用户理解这行代码:private static final Logger log = LoggerFactory.getLogger(OrderService.class);。首先,用户可能刚接触Java日志框架,对Logger和LoggerFactory不太熟悉。我需要先分解代码的每个部分,解释清楚每个关键字和方法的用途。 用户之前问过@Slf4j的作用,现在看到的是传统写法,所以可能需要对比两者的不同,说明为什么会有这样的代码。需要解释静态常量的意义,为什么使用private、static、final这些修饰符,以及LoggerFactory.getLogger()方法的作用。 接下来,用户可能不理解OrderService.class作为参数的意义,这里需要说明类字面量的作用,以及如何通过类名来区分不同类的日志。同时,可能需要提到日志框架的配置,比如SLF4J是门面模式,背后可能有Logback或Log4j2等实现。 还要考虑用户可能遇到的问题,比如依赖缺失或配置错误导致日志不输出,这时候需要给出常见问题的解决方法,或者引导用户检查依赖和配置文件。此外,用户可能想知道为什么要手动写这行代码而不是用Lombok,可以简单提到Lombok的@Slf4j注解如何自动生成这行代码,减少样板代码。 需要确保解释清晰,结构有条理,分步骤讲解每个部分,避免使用过于专业的术语,用简单的例子帮助理解。同时,对比传统写法与Lombok的注解方式,让用户明白两者的异同和适用场景。最后,总结这行代码的作用和重要性,强调其在日志记录中的必要性。</think>这行代码是**手动创建日志记录器**的标准写法,用于在 Java 类中记录日志。我们分三部分解析: --- ### 一、**代码拆解** ```java private static final Logger log = LoggerFactory.getLogger(OrderService.class); ``` | 组成部分 | 说明 | |--------------------------|--------------------------------------------------------------------| | `private` | 访问修饰符:限定仅当前类可用 | | `static` | 静态修饰符:日志对象属于类级别,所有实例共享同一个日志对象 | | `final` | 不可变性:防止日志对象被意外修改 | | `Logger` | 日志接口(来自 SLF4J 等日志框架) | | `LoggerFactory` | 工厂类:根据参数生成具体的 Logger 实例 | | `getLogger(OrderService.class)` | 关键方法:<br>- 参数 `OrderService.class` 表示当前类<br>- 自动关联日志配置中的类名过滤规则 | --- ### 二、**与传统写法的对比** #### 原始写法(无 Lombok) ```java public class OrderService { // 需要手动声明 private static final Logger log = LoggerFactory.getLogger(OrderService.class); public void method() { log.info("业务操作"); } } ``` #### 使用 `@Slf4j` 注解 ```java @Slf4j // Lombok 自动生成日志对象 public class OrderService { public void method() { log.info("业务操作"); // 直接使用 } } ``` --- ### 三、**为什么要这样写?** #### 1. **标准化日志输出 通过类名 (`OrderService.class`) 标识日志来源,方便在日志文件中过滤特定类的日志: ``` 2024-01-20 14:30:45 [INFO] com.service.OrderService - 订单创建成功 ``` #### 2. **性能优化 - `static`:避免每次实例化对象时重复创建 Logger - `final`:防止运行时被修改导致日志混乱 #### 3. **框架兼容性 SLF4J 是日志门面框架,实际可对接 Logback/Log4j2 等实现,保持代码与具体日志框架解耦。 --- ### 四、**常见问题排查** #### 1. **编译报错 `cannot find symbol Logger`** ✅ 检查是否缺少日志框架依赖: ```xml <!-- Maven 示例 --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>2.0.9</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.4.11</version> </dependency> ``` #### 2. **日志不输出** ✅ 检查日志级别配置(如 `logback.xml`): ```xml <configuration> <logger name="com.service" level="DEBUG"/> <!-- 允许输出 DEBUG 及以上级别 --> </configuration> ``` --- ### 总结 这行代码的本质是: 1. **创建类专属的日志记录通道** 2. **遵循日志框架的最佳实践** 3. **为后续的日志分级、过滤、追踪提供基础设施** 如果使用 Lombok 的 `@Slf4j` 注解,可以避免手动编写这行模板代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值