<前文回顾>
<今日更新>
一、开篇整活儿
今儿个咱唠唠 Spring Boot 里头的日志管理。这玩意儿吧,说大不大,说小不小,整好了是锦上添花,整不好就是火上浇油。你要是刚入门,那可得悠着点儿,别一上来就整得自己"翻车"了。
二、Logback 是啥玩意儿?
Logback 是 Java 里头的一个日志框架,比 Log4j 还高级,性能更好,功能更全。Spring Boot 里头默认就集成了这玩意儿,用起来贼方便。
1. 基本用法
Logback 的配置文件是 logback.xml,你只要把这文件放到 src/main/resources 目录下,Spring Boot 就会自动加载。
|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| XML Code |
| <configuration> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <root level="info"> <appender-ref ref="STDOUT" /> </root> </configuration> |
这段代码里头,logback.xml 配置了一个控制台输出的日志格式,%d 是日期,%-5level 是日志级别,%logger{36} 是日志名称,%msg 是日志内容,%n 是换行。
2. 在代码中使用
你可以在代码里头用 Logger 对象来记录日志。
|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Java Code |
| import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class MyService { private static final Logger logger = LoggerFactory.getLogger(MyService.class); public void doSomething() { logger.info("开始干活儿"); // 一些业务逻辑 logger.info("干完活儿了"); } } |
这段代码里头,MyService 类里头用 Logger 对象记录了日志,info 方法用来记录普通信息。
三、Logback 的高级配置
Logback 的功能贼强大,你可以配置日志的输出格式、输出位置、日志级别啥的。
1. 输出到文件
你可以把日志输出到文件里头,方便以后查看。
|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| XML Code |
| <configuration> <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> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <root level="info"> <appender-ref ref="FILE" /> </root> </configuration> |
这段代码里头,logback.xml 配置了一个文件输出的日志格式,logs/app.log 是日志文件的路径,logs/app.%d{yyyy-MM-dd}.log 是日志文件的滚动规则,maxHistory 是保留的日志文件数量。
2. 日志级别
你可以配置日志的级别,控制日志的输出。
|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| XML Code |
| <configuration> <logger name="com.example.demo" level="debug" additivity="false"> <appender-ref ref="STDOUT" /> </logger> <root level="info"> <appender-ref ref="STDOUT" /> </root> </configuration> |
这段代码里头,logback.xml 配置了 com.example.demo 包的日志级别是 debug,additivity="false" 表示不继承父级的日志配置。
3. 异步日志
你可以配置异步日志,提升性能。
|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| XML Code |
| <configuration> <appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender"> <appender-ref ref="STDOUT" /> </appender> <root level="info"> <appender-ref ref="ASYNC" /> </root> </configuration> |
这段代码里头,logback.xml 配置了一个异步日志输出,AsyncAppender 是异步日志的类。
四、自定义日志格式
你可以自定义日志的输出格式,满足不同的需求。
1. 自定义日志格式
|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| XML Code |
| <configuration> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <root level="info"> <appender-ref ref="STDOUT" /> </root> </configuration> |
这段代码里头,logback.xml 配置了一个自定义的日志格式,%d 是日期,%-5level 是日志级别,%logger{36} 是日志名称,%msg 是日志内容,%n 是换行。
2. 自定义日志颜色
你可以给日志加上颜色,方便查看。
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| XML Code |
| <configuration> <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" /> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%clr(%d{yyyy-MM-dd HH:mm:ss}){faint} %clr(%-5level) %clr(%logger{36}){cyan} - %msg%n</pattern> </encoder> </appender> <root level="info"> <appender-ref ref="STDOUT" /> </root> </configuration> |
这段代码里头,logback.xml 配置了一个带颜色的日志格式,%clr 是颜色转换器,{faint} 是淡色,{cyan} 是青色。
五、Spring Boot 里头的日志坑点
1. 日志级别冲突
Spring Boot 里头,日志级别配置可能会冲突。你要是配置了 application.properties 里头的日志级别,那 logback.xml 里头的配置就不起作用了。
|--------------------------------------|
| Properties Code |
| logging.level.com.example.demo=debug |
这段代码里头,application.properties 配置了 com.example.demo 包的日志级别是 debug。
2. 日志文件路径
Spring Boot 里头,日志文件的路径可能会出问题。你要是配置了 application.properties 里头的日志文件路径,那 logback.xml 里头的配置就不起作用了。
|--------------------------------|
| Properties Code |
| logging.file.name=logs/app.log |
这段代码里头,application.properties 配置了日志文件的路径是 logs/app.log。
3. 日志文件大小
Spring Boot 里头,日志文件的大小可能会出问题。你要是配置了 application.properties 里头的日志文件大小,那 logback.xml 里头的配置就不起作用了。
|----------------------------|
| Properties Code |
| logging.file.max-size=10MB |
这段代码里头,application.properties 配置了日志文件的最大大小是 10MB。
专有名词解释
- Logback:Java 里头的一个日志框架,比 Log4j 还高级,性能更好,功能更全。
- logback.xml:Logback 的配置文件,用来配置日志的输出格式、输出位置、日志级别啥的。
- Logger:Java 里头的一个日志对象,用来记录日志。
- appender:Logback 里头的一个组件,用来指定日志的输出位置。
- encoder:Logback 里头的一个组件,用来指定日志的输出格式。
- rollingPolicy:Logback 里头的一个组件,用来指定日志文件的滚动规则。
- AsyncAppender:Logback 里头的一个组件,用来实现异步日志输出。
- conversionRule:Logback 里头的一个组件,用来指定日志格式的转换规则。
- ColorConverter:Spring Boot 里头的一个组件,用来给日志加上颜色。