日志

未匹配的标注

Spring Boot 日志配置与使用教程

日志是应用程序开发中不可或缺的部分,Spring Boot 提供了强大的日志支持。本教程将详细介绍 Spring Boot 中的日志配置和使用方法。

一、Spring Boot 日志基础

  1. 默认日志框架
    Spring Boot 默认使用 SLF4J 作为日志门面,Logback 作为日志实现。

  2. 基本使用
    在任何类中,可以通过以下方式获取 Logger:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@RestController
public class MyController {
    private static final Logger logger = LoggerFactory.getLogger(MyController.class);

    @GetMapping("/test")
    public String test() {
        logger.trace("This is a TRACE message");
        logger.debug("This is a DEBUG message");
        logger.info("This is an INFO message");
        logger.warn("This is a WARN message");
        logger.error("This is an ERROR message");
        return "Check the logs!";
    }
}

二、日志级别

  1. 日志级别分类
    从低到高依次为:
    • TRACE

• DEBUG

• INFO

• WARN

• ERROR

• OFF(关闭日志)

  1. 配置日志级别
    application.propertiesapplication.yml 中配置:
# 设置root日志级别
logging.level.root=WARN

# 设置特定包的日志级别
logging.level.com.example.demo=DEBUG
logging.level.org.springframework.web=INFO

YAML 格式:

logging:
  level:
    root: WARN
    com.example.demo: DEBUG
    org.springframework.web: INFO

三、日志输出配置

  1. 输出到文件
    # 输出日志到文件
    logging.file.name=myapp.log
    

或者使用path(目录+固定文件名spring.log)

logging.file.path=/var/logs


2. 日志文件滚动策略
```properties
# 日志文件最大大小
logging.logback.rollingpolicy.max-file-size=10MB

# 保留的日志文件数量
logging.logback.rollingpolicy.max-history=7

# 日志文件名称模式
logging.logback.rollingpolicy.file-name-pattern=${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz
  1. 控制台输出格式
    # 控制台输出模式
    logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
    

文件输出模式

logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n


四、高级配置

1. 使用 logback-spring.xml
在 `resources` 目录下创建 `logback-spring.xml` 文件:

```xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>

    <property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/spring.log}"/>

    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
            <charset>utf8</charset>
        </encoder>
    </appender>

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_FILE}</file>
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
            <charset>utf8</charset>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz</fileNamePattern>
            <maxFileSize>10MB</maxFileSize>
            <maxHistory>7</maxHistory>
            <totalSizeCap>1GB</totalSizeCap>
        </rollingPolicy>
    </appender>

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

    <logger name="com.example.demo" level="DEBUG"/>
</configuration>
  1. 按环境配置日志
    logback-spring.xml 中使用 Spring Profile:
<springProfile name="dev">
    <logger name="com.example.demo" level="DEBUG"/>
</springProfile>

<springProfile name="prod">
    <logger name="com.example.demo" level="INFO"/>
    <root level="INFO">
        <appender-ref ref="FILE"/>
    </root>
</springProfile>

五、日志最佳实践

  1. 合理使用日志级别:
    • TRACE: 非常详细的调试信息

    • DEBUG: 调试信息

    • INFO: 重要的业务过程信息

    • WARN: 潜在问题

    • ERROR: 错误信息,需要关注

  1. 日志内容规范:
    • 包含足够的上下文信息

    • 避免记录敏感信息(密码、密钥等)

    • 使用占位符而不是字符串拼接:logger.debug("User {} logged in", username)

  1. 性能考虑:
    • 在高频调用的代码中避免不必要的日志

    • 使用 isDebugEnabled() 检查(对于复杂日志消息)

if (logger.isDebugEnabled()) {
    logger.debug("Expensive log message: {}", expensiveOperation());
}

六、与其他日志框架集成

  1. 使用 Log4j2
    pom.xml 中排除 Logback 并添加 Log4j2:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

然后创建 log4j2-spring.xml 配置文件。

  1. 使用 JUL (java.util.logging)
    Spring Boot 也支持 JUL,但不推荐,因为功能较弱。

七、日志监控与管理

  1. Spring Boot Actuator 日志端点:
    添加依赖:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>

    配置:

    management.endpoints.web.exposure.include=loggers

    访问 /actuator/loggers 查看和修改日志级别

  2. 集成 ELK 或 Splunk 进行日志集中管理

八、常见问题解决

  1. 日志不输出:
    • 检查日志级别配置

    • 检查是否有多个日志框架冲突

  1. 日志文件不滚动:
    • 检查文件大小限制配置

    • 检查文件权限

  1. 日志格式不生效:
    • 确保没有多个配置文件冲突

    • 检查配置文件名是否正确

通过本教程,你应该能够掌握 Spring Boot 中的日志配置和使用方法,为你的应用程序实现完善的日志记录功能。

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
唐章明
讨论数量: 0
发起讨论 查看所有版本


暂无话题~