# 日志框架 **Repository Path**: bruce6213/log-framework ## Basic Information - **Project Name**: 日志框架 - **Description**: SpringBoot 默认日志框架Slf4j + logback, 以及logback.xml配置文件的使用 demo - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-04-18 - **Last Updated**: 2025-06-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 引言 - Spring默认使用的日志框架是JCL,而**SpringBoot默认集成**的日志框架使用的是**SLF4j+Logback**组合。 - spring-boot-starter-logging是Logback的日志实现,而Spring Boot启动项spring-boot-starter又依赖了spring-boot-starter-logging,所以Spring Boot就默认集成了Logback,**无需额外添加相关依赖,开箱即用**。 - 默认情况下,SpringBoot内部使用logback作为系统日志实现的框架,将日志输出到控制台,不会写到日志文件。如果在application.properties或application.yml配置,这样只能配置简单的场景,保存路径、日志格式等。复杂的场景(区分 info 和 error 的日志、每天产生一个日志文件等)满足不了,故还需要**自定义配置文件logback-spring.xml**。 ``` %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %highlight(%-5level) %cyan(%logger{50}:%L) - %msg%n UTF-8 ${LOG_HOME}/app.log ${LOG_HOME}/app-%d{yyyy-MM-dd}.%i.log 10MB 30 20GB %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n UTF-8 ``` # 框架示意图 ![门面 + 实现](https://gitee.com/bruce6213/image/raw/master/01.png) # 更换默认实现 ## 日志门面框架 通过@SLF4j注解, 我们就可以使用SLF4J的门面框架,其等同如下代码: ``` import org.slf4j.Logger; import org.slf4j.LoggerFactory; Logger logger = LoggerFactory.getLogger(YourClass.class); ``` ## 日志实现框架 由于spring-boot-starter包含了spring-boot-starter-logging,故如果我们需要更换日志实现框架,首先需要排查该依赖 ``` org.springframework.boot spring-boot-starter org.springframework.boot spring-boot-starter-logging ``` 然后再添加相应的依赖即可,例如log4j2 ``` org.springframework.boot spring-boot-starter-log4j2 ``` # 配置文件加载顺序 1. 如果有 logback-spring.xml,则只会加载它。 2. 没有 logback-spring.xml 有 logback.xml,则加载 logback.xml。 3. 如果仅有 application.properties,则使用 Spring Boot 默认日志配置,并允许通过 application.properties 控制部分日志行为。 4. 如果既有logback-spring.xml 和 application.properties,具体生效以logback-spring.xml为主。 # 日志文件路径设置 ## 方式一 ``` 文件相对保存路径设置可分以下三种(假设当前项目目录为C:\Users\IDEA\logDemo): 1. value=“logs” – 表示保存到程序运行目录,在tomcat中为bin目录(C:\Users\IDEA\logDemo\logs) 2. value=“/logs” – 表示保存到系统目录(C:\logs) 3. value=“../logs” – 表示保存到程序运行目录的父目录(C:\Users\IDEA\logs) ``` ## 方式二 ``` // 动态读取application.yml ``` # 常用标签 ## configuration标签 ``` ``` ### scan属性 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,**默认值为true**。 ### scanPeriod属性 设置监测配置文件是否有修改的时间间隔;如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。**默认的时间间隔为1分钟**。 ### debug属性 当此属性设置为true时,将打印出logback内部日志信息;**默认值为false。** ## contextName标签 - 用于设置上下文名称;每个logger都关联到logger上下文,默认上下文名称为“default”。 - **一旦设置,不能修改**,即不能在多个配置文件中重复配置。 ``` logback ``` ## property标签 - 用于定义变量(name:value) - 定义变量后,可以使“${}”来使用变量 ``` ${APP_Name} ``` ## appender标签 - 确定打印输出策略(一般来说分为控制台、文件) - 确定日志的输出格式 ### 控制台输出 ``` %d{yyyy-MM-dd HH:mm:ss.SSS} # 日志时间(精确到毫秒) [%thread] # 线程名 %highlight(%-5level) # 日志级别,高亮显示 %cyan(%logger{50}:%L) # 日志记录器名(最多50字符)和代码行号,青色显示 - %msg%n # 日志消息及换行 UTF-8 # 设置字符集为UTF-8,防止中文乱码 ``` ### 文件输出 ``` ${LOG_HOME}/log_debug.log ${LOG_HOME}/jeecgboot-%d{yyyy-MM-dd}.%i.log 30 10MB 20GB %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n UTF-8 ``` ## root标签 - 用于确定启动哪些apperder - root 只会影响没有被单独设置 level 的 logger - root的level决定了日志输出的**全局最低门槛** ``` # 日志级别从高到底:ERROR、WARN、INFO、DEBUG、TRACE ``` ## logger标签 - root相当于全局配置,而logger相当于局部配置 ``` ``` # 日志过滤器 ``` trace ${LOG_PATTERN} UTF-8 ``` ``` debug ACCEPT DENY ``` # 参考文章 [logback.xml配置文件介绍](https://juejin.cn/post/7200549600590282789) [日志过滤器](https://blog.csdn.net/justry_deng/article/details/108074525)