【SpringBoot】【log】 自定义logback日志配置

📅 发布时间:2026/7/5 19:00:55 👁️ 浏览次数:
【SpringBoot】【log】 自定义logback日志配置
前言默认情况下SpringBoot内部使用logback作为系统日志实现的框架将日志输出到控制台不会写到日志文件。如果在application.properties或application.yml配置这样只能配置简单的场景保存路径、日志格式等。复杂的场景区分 info 和 error 的日志、每天产生一个日志文件等满足不了只能自定义配置文件logback-spring.xml。一、application.properties系统配置logback日志1.1、SpringBoot默认的日志配置日志记录器Logger的行为是分等级的日志级别从低到高分为TRACE DEBUG INFO WARN ERROR FATAL如果设置为WARN则低于WARN的信息都不会输出。默认情况下SpringBoot内部使用logback作为系统日志实现的框架将日志输出到控制台不会写到日志文件。Spring boot从控制台打印出来的日志级别默认只有INFO及以上级别可以在application.properties中修改日志级别logging.level.rootWARN。SpringBoot默认配置好了日志, 只要启动 Spring Boot 项目就会在控制台输出日志信息。从上图可以看到日志输出的内容如下时间日期精确到毫秒日志级别ERRORWARNINFODEBUGTRACE进程ID分隔符— 标识实际日志的开始线程名方括号括起来(可能会截断控制台输出)Logger名通常使用源代码的类名日志内容控制台格式化输出内容# 格式化只输出日期和内容 logging.pattern.console %d -%p -%m %n打印参数: Log4J采用类似C语言中的printf函数的打印格式格式化日志信息如下:%m 输出代码中指定的消息%p 输出优先级即DEBUGINFOWARNERRORFATAL%r 输出自应用启动到输出该log信息耗费的毫秒数%c 输出所属的类目通常就是所在类的全名%t 输出产生该日志事件的线程名%n 输出一个回车换行符Windows平台为“\r”Unix平台为“”%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式比 如%d{yyy MMM dd HH:mm:ss,SSS}输出类似2018年6月15日22:10:28921%l 输出日志事件的发生位置包括类目名、发生的线程以及在代码中的行数。举 例estlog4.main(TestLog4.java: 10)1.2、添加依赖Spring Boot为我们提供了很多默认的日志配置所以只要将spring-boot-starter-logging作为依赖加入到pom.xml则“开箱即用”。实际开发中我们不需要直接添加该依赖你会发现spring-boot-starter其中包含了 spring-boot-starter-logging该依赖内容就是 Spring Boot 默认的日志框架 logback。org.springframework.boot spring-boot-starter-logging 1.3、application.properties简单配置日志相关属性 下面介绍几种在application.properties就可以配置的日志相关属性。1控制台输出Spring Boot中默认配置INFO、WARN和ERROR级别的日志只输出到控制台。我们可以在application.properties中修改日志级别logging.level.rootWARN这样核心Logger包含嵌入式容器、hibernate、spring会输出更多内容还有自己应用的日志就会输出为DEBUG级别。2文件输出①使用application.properties默认配置默认情况下Spring Boot将日志输出到控制台不会写到日志文件。如果要编写除控制台输出之外的日志文件则需在application.properties中设置logging.file或logging.path属性。logging.file设置文件可以是绝对路径也可以是相对路径。如logging.filemy.loglogging.path设置目录会在该目录下创建spring.log文件并写入日志内容如logging.path/var/log如果只配置 logging.file会在项目的当前路径下生成一个 xxx.log 日志文件如果只配置 logging.path在 /var/log文件夹生成一个日志文件为 spring.log。注二者不能同时使用如若同时使用则只有logging.file生效默认情况下日志文件的大小达到10MB时会切分一次产生新的日志文件默认级别为ERROR、WARN、INFO。②使用logback-spring.xml自定义配置如果在application.properties或application.yml配置这样只能配置简单的场景保存路径、日志格式等。复杂的场景区分 info 和 error 的日志、每天产生一个日志文件等满足不了只能自定义logback配置SpringBoot官方推荐使用logback-spring.xml作为logback框架的自定义日志配置文件。1.4、两种配置方式总结SpringBoot工程自带 logback和 slf4j的依赖所以重点放在编写配置文件上application.properties或 application.yml 系统层面logback-spring.xml自定义文件方式第一种方式比较简单可做的事情也比较简单比如只能配置日志文件的输出路径、日志文件的格式、日志的级别等。第二种方式比较复杂对日志的处理比较好生产上推荐这种运行维护好。如有以下需求a、区分 debug、info、error 等类型的日志并分别输出到不同的日志文件。b、对日志文件进行维护如每天产生一个日志文件并设置日志文件的大小和保留天数等。二、自定义日志配置logback-spring.xml由于日志服务一般都在ApplicationContext创建前就初始化了它并不是必须通过Spring的配置文件控制。因此通过系统属性和传统的Spring Boot外部配置文件依然可以很好的支持日志控制和管理。在类路径下放置自定义日志配置xml文件SpringBoot就不会使用它本身的默认日志配置了。2.1、日志记录框架的默认自定义配置文件名称下图是SpringBoot官方文档的提示内容意思是根据您的日志记录系统将加载相应的文件使用。即如果我们使用logback日志框架那么可以使用logback-spring.xml、logback-spring.groovy、logback.xml、logback.groovy之一作为配置文件来加载。根据不同的日志系统你可以按如下规则组织配置文件名并且放在src/main/resources下面就能被正确加载Logbacklogback-spring.xml, logback-spring.groovy, logback.xml, logback.groovyLog4jlog4j-spring.properties, log4j-spring.xml, log4j.properties, log4j.xmlLog4j2log4j2-spring.xml, log4j2.xmlJDK (Java Util Logging)logging.properties2.2、SpringBoot推荐使用logback-spring.xmlSpringBoot官方推荐使用logback-spring.xml作为logback框架的自定义日志配置文件例如使用logback-spring.xml而不是logback.xml因为带-spring后缀的配置文件可以使用SpringBoot提供的一些高级功能如profile多环境日志输出。将所有日志都存储在一个文件中文件大小也随着应用的运行越来越大并且不好排查问题正确的做法应该是将 error日志和其他系统输出日志分开并且不同级别的日志根据时间段进行记录存储。在 src/main/resources 下创建 logback-spring.xml 文件分开记录系统输出日志和Error日志${CONSOLE\_LOG\_PATTERN} %d{yyyy-MM-dd HH:mm:ss.SSS} \[%thread\] %-5level %logger{36} - %msg%n ${DEV\_FILE\_PATH}/output-%d{yyyy-MM-dd}.log 10MB 60 a 2GB ERROR %d{yyyy-MM-dd HH:mm:ss.SSS} \[%thread\] %-5level %logger{36} - %msg%n ${DEV\_FILE\_PATH}/error-%d{yyyy-MM-dd}.log 10MB 60 2GB 输出结果非彩色日志彩色日志2.3、logback配置文件的节点属性简介Appender是负责写日志的组件设置日志信息的去向常用的有以下几个ch.qos.logback.core.ConsoleAppender (控制台)ch.qos.logback.core.rolling.RollingFileAppender (文件大小到达指定尺寸的时候产生一个新文件)ch.qos.logback.core.FileAppender (文件)其中 标签的 name 属性对应 application.properties 中的 spring.profiles.active 的配置。即 spring.profiles.active 的值可以看作是日志配置文件中对应的 springProfile 是否生效的开关。(1) logger用来设置某一个包或者具体的某一个类的日志打印级别、以及指定appender。logger仅有一个name属性一个可选的level和一个可选的additivity属性。name用来指定受此logger约束的某一个包或者具体的某一个类。level用来设置打印级别大小写无关TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF还有一个特殊值INHERITED或者同义词NULL代表强制执行上级的级别。如果未设置此属性那么当前logger将会继承上级的级别。additivity是否向上级logger传递打印信息。默认是true。logger可以包含零个或多个appender-ref元素标识这个appender将会添加到这个logger。(2)root也是logger元素但是它是根logger。只有一个level属性因为已经被命名为”root”。level用来设置打印级别大小写无关TRACE,DEBUG,INFO,WARN,ERROR,ALL和OFF不能设置为INHERITED或者同义词NULL。默认是DEBUG。root可以包含零个或多个appender-ref元素标识这个appender将会添加到这个logger。rootLogger指定日志信息输出到哪个地方可以同时指定多个输出目的地。三、多环境输出日志文件SpringBoot官方建议使用logback-spring.xml作为logback框架的自定义日志配置文件使用logback-spring.xml而不是logback.xml因为带-spring后缀的配置文件可以使用使用Spring扩展profile支持提供profile多环境日志输出得功能。Logback 配置文件中的 节点指令允许您根据配置文件激活参数(active) 选择性的包含和排查部分配置信息。根据不同环境来定义不同的日志输出在 logback-spring.xml中使用 节点来定义方法如下为何root配置的INFOlogger特殊指定的包/类日志DEBUG级别最后也能打印出来答案因为没有设置addtivity“false” 如下图即可。logger有一个属性addtivitytrue 默认就是true,标识向上级传递日志INFO是DEBUG的上级。只有显示指定为false时才不会向上级输出。1可以启动服务的时候指定 profile 如不指定使用默认如指定prod 的方式为java -jar xxx.jar –spring.profiles.activeprod2也可以在yml配置文件中指明当前环境是什么环境否则启动会报错如下四、 解决 logback.xml 配置文件不生效的问题问题描述在resources目录下建立logback-spring配置文件后只能打印控制台日志不能创建日志文件。疯狂修改配置文件的内容就连常用的重启、清除缓存都试过了但是日志配置依然不生效。所以就查找原因既然不是配置文件内部的问题那就是配置文件根本就没起效果。原因追溯意外发现SpringBoot项目打包后的target/classes没有包含logback-spring.xml这就是logback.xml 配置不起作用的根本原因。然后发现之前在pom.xml中加了个resources目录下文件的过滤配置没有保留logback日志文件src/main/resources true application-${spring.profiles.active}.yaml application.properties application.properties 解决方案保留logback-spring.xml和logback.xml配置文件 src/main/resources true application-${spring.profiles.active}.yaml application.properties application.properties logback.xml logback-spring.xml 现在target-classes下有了logback.xml配置文件相关日志正常生效。原文链接https://blog.csdn.net/CSDN2497242041/article/details/122596582