【 <二> 丹方改良: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 里头的一个组件,用来给日志加上颜色。
相关推荐
橘猫云计算机设计7 分钟前
基于Java的班级事务管理系统(源码+lw+部署文档+讲解),源码可白嫖!
java·开发语言·数据库·spring boot·微信小程序·小程序·毕业设计
多多*13 分钟前
JavaEE企业级开发 延迟双删+版本号机制(乐观锁) 事务保证redis和mysql的数据一致性 示例
java·运维·数据库·redis·mysql·java-ee·wpf
计算机-秋大田16 分钟前
基于Spring Boot的个性化商铺系统的设计与实现(LW+源码+讲解)
java·vue.js·spring boot·后端·课程设计
叱咤少帅(少帅)18 分钟前
Go环境相关理解
linux·开发语言·golang
熬了夜的程序员21 分钟前
Go 语言封装邮件发送功能
开发语言·后端·golang·log4j
uhakadotcom22 分钟前
PostgreSQL 行级安全性(RLS)简介
后端·面试·github
士别三日&&当刮目相看28 分钟前
JAVA学习*String类
java·开发语言·学习
烂蜻蜓36 分钟前
深度解读 C 语言运算符:编程运算的核心工具
java·c语言·前端
王嘉俊92543 分钟前
ReentranLock手写
java·开发语言·javase
小马爱打代码1 小时前
Spring Boot - 动态编译 Java 类并实现热加载
spring boot·后端