springboot的日志体系

我们对springboot使用的日志,有个全局观。

1.首先,引用哪几个依赖会出现引入日志的依赖

2.这些常用的日志特征是什么,如何选择哪种日志

3.如何配置这些日志,要配置什么内容

4.具体的日志框架如何使用。

回答:

Spring Boot日志实战指南

一、依赖怎么加

直接抄就行:

用默认的Logback(啥都不用干)

xml

复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

Spring Boot自动带了日志,直接用。

换用Log4j2

xml

复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</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>

二、哪个好用?

Logback:Spring Boot默认的,够用,简单

Log4j2:性能好,高并发用这个

普通项目用Logback,高并发用Log4j2

三、配置怎么写

application.yml里配:

yaml 复制代码
yaml
logging:
  level:
    root: info  # 全局级别
    com.xxx.service: debug  # 自己的包用debug
    org.springframework: warn  # spring的包用warn
  file:
    name: /tmp/app.log  # 输出到文件
  pattern:
    console: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"

想更复杂就建logback-spring.xml:

xml

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- 控制台输出 -->
    <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>logs/app.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>logs/app.%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
    </appender>
    
    <!-- 开发环境用控制台 -->
    <springProfile name="dev">
        <root level="info">
            <appender-ref ref="CONSOLE"/>
        </root>
    </springProfile>
    
    <!-- 生产环境用文件 -->
    <springProfile name="prod">
        <root level="info">
            <appender-ref ref="FILE"/>
        </root>
    </springProfile>
</configuration>

四、代码里怎么用

方式1:传统写法

java 复制代码
java
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@Service
public class UserService {
    // 声明logger
    private static final Logger log = LoggerFactory.getLogger(UserService.class);
    
    public void addUser(String name) {
        log.info("开始添加用户: {}", name);  // 这样写,别用字符串拼接
        
        try {
            // 业务代码
            log.debug("详细参数: {}", getDetails());  // debug级别
        } catch (Exception e) {
            log.error("添加用户失败: {}, 原因: {}", name, e.getMessage(), e);  // 错误要带异常
        }
    }
}

方式2:用Lombok(推荐)

java

java 复制代码
import lombok.extern.slf4j.Slf4j;

@Slf4j  // 加这个注解,自动生成log变量
@Service
public class OrderService {
    
    public void createOrder() {
        log.info("创建订单");
        if (log.isDebugEnabled()) {  // 复杂日志先判断级别
            log.debug("订单详情: {}", expensiveData());
        }
    }
}

五、重要技巧

别这么写:

java

log.info("用户:" + userId + ",数据:" + bigData()); // 垃圾写法,影响性能

要这么写:

java

log.info("用户: {},数据: {}", userId, bigData()); // 正确写法

日志级别:

error:出错了,必须处理

warn:有点问题,但还能用

info:正常流程记录(用户登录、下单)

debug:调试信息(开发时用)

trace:最详细的(基本不用)

环境区分:

开发环境:级别用debug,输出到控制台

生产环境:级别用info,输出到文件

六、一句话总结

普通项目直接用Spring Boot默认的Logback

application.yml配基本设置,复杂需求建logback-spring.xml

代码里用@Slf4j注解,日志用{}占位符

生产环境记得调高日志级别,别让debug日志拖慢系统

我们对springboot使用的日志,有个全局观。

1.首先,引用哪几个依赖会出现引入日志的依赖

2.这些常用的日志特征是什么,如何选择哪种日志

3.如何配置这些日志,要配置什么内容

4.具体的日志框架如何使用。

回答:

相关推荐
梵得儿SHI1 分钟前
(第七篇)Spring AI 核心技术攻坚:国内模型深度集成与国产化 AI 应用实战指南
java·人工智能·spring·springai框架·国产化it生态·主流大模型的集成方案·麒麟系统部署调优
北辰当尹11 分钟前
【实习之旅】Kali虚拟机桥接模式ping通百度
java·服务器·桥接模式
qq_2562470513 分钟前
除了“温度”,如何用 Penalty (惩罚) 治好 AI 的“复读机”毛病?
后端
Just Dreamchaser16 分钟前
Pdf和Docx文件导出生成水印工具类
java·给pdf和docx文件添加水印
这个需求做不了18 分钟前
Java实现文件格式转换(图片,视频,文档,音频)
java
愿你天黑有灯下雨有伞23 分钟前
高性能Java并发编程:如何优雅地使用CompletableFuture进行异步编排
java
indexsunny24 分钟前
互联网大厂Java面试实战:基于电商场景的Spring Boot与微服务技术问答
java·spring boot·微服务·面试·hibernate·电商场景·技术问答
内存不泄露24 分钟前
基于Spring Boot和Vue 3的智能心理健康咨询平台设计与实现
vue.js·spring boot·后端
qq_124987075325 分钟前
基于Spring Boot的电影票网上购票系统的设计与实现(源码+论文+部署+安装)
java·大数据·spring boot·后端·spring·毕业设计·计算机毕业设计
无心水26 分钟前
【分布式利器:腾讯TSF】6、TSF可观测性体系建设实战:Java全链路Metrics+Tracing+Logging落地
java·分布式·架构·wpf·分布式利器·腾讯tsf·分布式利器:腾讯tsf