【 <二> 丹方改良:Spring 时代的 JavaWeb】之 Spring Boot 中的日志管理:Logback 的集成

<前文回顾>

点击此处查看 合集 https://blog.csdn.net/foyodesigner/category_12907601.html?fromshare=blogcolumn&sharetype=blogcolumn&sharerId=12907601&sharerefer=PC&sharesource=FoyoDesigner&sharefrom=from_link

<今日更新>

一、开篇整活儿

今儿个咱唠唠 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。

专有名词解释

  1. Logback:Java 里头的一个日志框架,比 Log4j 还高级,性能更好,功能更全。
  2. logback.xml:Logback 的配置文件,用来配置日志的输出格式、输出位置、日志级别啥的。
  3. Logger:Java 里头的一个日志对象,用来记录日志。
  4. appender:Logback 里头的一个组件,用来指定日志的输出位置。
  5. encoder:Logback 里头的一个组件,用来指定日志的输出格式。
  6. rollingPolicy:Logback 里头的一个组件,用来指定日志文件的滚动规则。
  7. AsyncAppender:Logback 里头的一个组件,用来实现异步日志输出。
  8. conversionRule:Logback 里头的一个组件,用来指定日志格式的转换规则。
  9. ColorConverter:Spring Boot 里头的一个组件,用来给日志加上颜色。
相关推荐
秋饼11 分钟前
MySQL 分库分表完全指南:ShardingSphere-JDBC 实战、分片键选型、场景边界、20 个生产坑与 30 道面试点
java·mysql·面试·shardingsphere·分库分表·后端架构
郭小李15 分钟前
spring 的 @CookieValue 注解 用法
java·后端·spring
天远Date Lab24 分钟前
零信任架构实战:基于天远企业股权变更构建自动化招投标供应商股东穿透审查网关
java·人工智能·架构·自动化
蘑菇小白32 分钟前
Linux多线程开发
linux·开发语言·线程
god_cvz41 分钟前
麒麟 V10(ARM64 / aarch64)源码编译 3dtiles 全步骤
后端·gis
武子康43 分钟前
批量设备任务显示 COMPLETED,为什么还有设备失败?
人工智能·后端·agent
2601_9669496543 分钟前
Python 实战:如何统计五档盘口买卖盘总挂单量?附计算公式与代码
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
weixin_399380691 小时前
TongWeb7.0.4.9M11如何接入到idea(by lqw)
java·ide·intellij-idea
paopaokaka_luck1 小时前
社区服务平台(加权协同过滤推荐、Jieba中文词频分析、WebSocket实时聊天、求助处理闭环、 活动积分闭环、ECharts多维分析)
java·前端·spring boot·mysql·echarts·mybatis
泡海椒1 小时前
折线图Y轴刻度悬空之谜-信用评级趋势
后端