Spring Boot 自定义日志打印(日志级别、logback-spring.xml 文件、自定义日志打印解读)

一、Logback

  1. 在 Spring Boot 中,日志框架默认使用的是 Logback,Spring Boot 提供了对日志配置的简化

  2. Spring Boot 默认会将日志输出到控制台,并且日志级别为 INFO

  3. 可以在 application.yamlapplication.properties 文件中进行日志配置

  4. 如果需要自定义日志配置,可以使用 logback-spring.xml 文件,Spring Boot 会自动加载该文件


二、日志级别

1、基本介绍
(1)INFO
  1. 一般信息,用于记录应用程序的运行状态

  2. 适用于记录应用程序的关键事件,例如,启动、关闭、重要配置加载等

  3. 用于提供足够信息,帮助了解应用状态,同时避免过多细节

(2)WARN
  1. 警告信息,表示潜在的问题

  2. 适用于记录潜在的问题,例如,配置不当、资源不足等,这些问题不会立即影响运行,但需关注

  3. 用于帮助发现并预防潜在问题

(3)ERROR
  1. 错误信息,表示发生了错误,但应用程序仍可运行

  2. 适用于记录严重错误,如数据库连接失败、关键业务逻辑异常等

  3. 用于快速定位和解决重大问题

(4)DEBUG
  1. 调试信息,用于开发阶段

  2. 适用于调试时,记录详细执行流程、变量值等

  3. 通常关闭,避免日志量过大,必要时可临时开启

(5)TRACE
  1. 最详细的日志信息,通常用于调试

  2. 适用于记录最详细的执行信息,用于深度调试

  3. 一般不开启,除非有特殊需求

2、小结
  1. 应选择合适的日志级别以确保既能捕获关键信息,又不会产生过多冗余日志

  2. 生产环境通常设置为 INFO

  3. 可根据需求调整特定包的日志级别,例如,将某些复杂模块设为 DEBUG


三、Spring Boot 自定义日志打印

1、配置文件
  • logback-spring.xml 文件中配置如下内容
<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <!-- 定义日志输出格式 -->
    <property name="CONSOLE_PATTERN" value="[%-5p] %d{yyyy-MM-dd HH:mm:ss} - %m%n"/>
    <property name="FILE_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5p %logger{1}:%line - %m%n"/>

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

    <!-- 每日滚动文件输出 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>d:/my-logs/application.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>d:/my-logs/application.%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>30</maxHistory> <!-- 保留历史日志文件的最大天数 -->
        </rollingPolicy>
        <encoder>
            <pattern>${FILE_PATTERN}</pattern>
        </encoder>
    </appender>

    <!-- 根日志配置 -->
    <root level="info">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE"/>
    </root>

</configuration>
2、测试代码
@Component
public class LogTest {

    private static final Logger logger = LoggerFactory.getLogger(LogTest.class);

    @PostConstruct
    public void test1() {
        logger.debug("This is a debug message");
        logger.info("This is an info message");
        logger.warn("This is a warning message");
        logger.error("This is an error message");
    }
}

四、Spring Boot 自定义日志打印解读

1、配置文件
(1)定义日志输出格式
<property name="CONSOLE_PATTERN" value="[%-5p] %d{yyyy-MM-dd HH:mm:ss} - %m%n"/>
<property name="FILE_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5p %logger{1}:%line - %m%n"/>
  • CONSOLE_PATTERN 是控制台日志的输出格式
  1. %-5p:日志级别(例如,INFO、ERROR),左对齐,占 5 个字符

  2. %d{yyyy-MM-dd HH:mm:ss}:日志时间戳

  3. %m:日志消息

  4. %n:换行符

# 输出示例

[INFO ] 2023-10-01 12:34:56 - This is a log message
  • FILE_PATTERN 是文件日志的输出格式。
  1. %d{yyyy-MM-dd HH:mm:ss}:日志时间戳

  2. [%thread]:当前线程名

  3. %-5p:日志级别

  4. %logger{1}:%line:日志记录器的名称(只显示最后一部分)和代码行号

  5. %m:日志消息

  6. %n:换行符

# 输出示例

2023-10-01 12:34:56 [main] INFO  com.example.MyClass:42 - This is a log message
(2)控制台输出配置
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>${CONSOLE_PATTERN}</pattern>
    </encoder>
</appender>
  1. CONSOLE:定义一个名为 CONSOLE 的日志输出目标,输出到控制台

  2. ConsoleAppender:将日志输出到控制台

  3. encoder:定义日志的输出格式,使用前面定义的 CONSOLE_PATTERN

(3)文件输出配置
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>d:/my-logs/application.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>d:/my-logs/application.%d{yyyy-MM-dd}.log</fileNamePattern>
        <maxHistory>30</maxHistory>
    </rollingPolicy>
    <encoder>
        <pattern>${FILE_PATTERN}</pattern>
    </encoder>
</appender>
  1. FILE:定义一个名为 FILE 的日志输出目标,输出到文件

  2. RollingFileAppender:支持日志文件滚动(按时间或大小分割)

  3. file:当前日志文件的路径为 d:/my-logs/application.log

  4. rollingPolicy:定义日志滚动策略

  5. TimeBasedRollingPolicy:按时间滚动日志文件

  6. fileNamePattern:滚动后的日志文件命名格式,例如 application.2023-10-01.log

  7. maxHistory:保留最近 30 天的日志文件,超过 30 天的文件会被自动删除

  8. encoder:定义日志的输出格式,使用前面定义的 FILE_PATTERN

(4)根日志配置
<root level="info">
    <appender-ref ref="CONSOLE"/>
    <appender-ref ref="FILE"/>
</root>
  1. root:定义根日志记录器

  2. level="info":设置日志级别为 INFO,即只记录 INFO 及以上级别(例如,WARN、ERROR)的日志

  3. appender-ref:将日志输出到 CONSOLEFILE 两个目标

2、测试代码
(1)创建 Logger 实例
private static final Logger logger = LoggerFactory.getLogger(LogTest.class);
  1. LoggerFactory 是 SLF4J 提供的工厂类,用于创建 Logger 实例

  2. getLogger(LogTest.class) 方法会根据传入的类(LogTest.class)创建一个与该类关联的 Logger 实例

  3. 日志输出时会自动带上类名(LogTest),方便定位日志来源

(2)打印日志
logger.debug("This is a debug message");
logger.info("This is an info message");
logger.warn("This is a warning message");
logger.error("This is an error message");
### 配置 logback-spring.xml 实现日志打印Spring Boot 项目中,`logback-spring.xml` 是用于自定义日志配置的核心文件。以下是关于如何正确配置 `logback-spring.xml` 来实现日志打印的具体方法。 #### 日志配置概述 Spring Boot 启动时会优先加载名为 `logback-spring.xml` 的文件作为日志系统的配置文件[^2]。如果没有找到此文件,则会退而求其次寻找 `logback.xml` 文件。由于 `logback-spring.xml` 支持更多高级功能(如 `${}` 占位符解析和基于 profile 的条件化配置),因此推荐使用它来进行日志管理。 #### 使用占位符引入外部属性 可以通过 `${}` 占位符机制,在 `logback-spring.xml` 中引用来自 `application.yml` 或者 `application.properties` 定义的变量。例如: ```xml <!-- application.yml --> logging: path: /var/log/myapp/ <!-- logback-spring.xml --> <configuration> <!-- 将 logging.path 属性映射到 log.path --> <property name="LOG_PATH" value="${logging.path}" /> <!-- 设置日志文件--> <property name="LOG_FILE_NAME" value="my-application.log" /> <!-- 控制台输出 --> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <!-- 文件输出 --> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_PATH}/${LOG_FILE_NAME}</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${LOG_PATH}/%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>10MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> <encoder> <pattern>%date %level [%thread] %logger{10} [%file:%line] %msg%n</pattern> </encoder> </appender> <!-- Root logger level --> <root level="info"> <appender-ref ref="CONSOLE" /> <appender-ref ref="FILE" /> </root> </configuration> ``` 上述代码片段展示了如何设置控制台和文件两种类型的 appender,并利用滚动策略按日期归档日志文件[^4]。 #### 特殊场景下的优化建议 为了适应更复杂的应用需求,可以进一步扩展配置逻辑: - **多环境适配**:借助 `<springProfile>` 标签实现针对开发、测试或生产环境的不同日志级别与路径设定。 ```xml <springProfile name="dev"> <root level="debug"> <appender-ref ref="CONSOLE"/> </root> </springProfile> <springProfile name="prod"> <root level="warn"> <appender-ref ref="FILE"/> </root> </springProfile> ``` - **权限校验**:确保指定的日志目录存在且应用程序对该目录拥有写入权限。 #### 总结 通过合理设计 `logback-spring.xml` 文件结构以及灵活运用其内置特性,能够显著提升项目的可维护性和运行效率。务必注意实际部署环境中可能存在的差异性因素,比如操作系统类型或者磁盘空间限制等问题的影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值