前段时间,公司让我整改SpringBoot
日志的配置,我改的老痛苦了。
一共有7
个微服务,其中每一个微服务各自都有4
个这样logback-spring-{active}.xml
文件。
正好我看过SpringBoot
中是怎么写的,给大家截图看下
既然如此,我们也可以通过include
标签来进行编写。
哦对了,SpringBoot
使用的logback
日志,里面的含义代表什么,我就不详细讲了。
具体可以看我的这边文章,SpringBoot日志配置详情 | 半月无霜 (banmoon.top)
这边创建两份基础文件,分别是
banmoon-logback-defined.xml
:里面定义了一些参数banmoon-logback-append.xml
:里面定义了一些输出banmoon-logback.xml
:将上面的两个文件引入整合,并加上了一些日志等级的配置看看文件所在的目录,都在scr/main/java
的包内
banmoon-logback-defined.xml
<?xml version="1.0" encoding="UTF-8"?>
<included>
<!-- 获取该应用的名称 -->
<springProperty scope="context" name="APPLICATION_NAME" source="spring.application.name"/>
<!-- 定义日志输出的路径 -->
<springProperty scope="context" name="LOG_PATH_SPRING" source="logging.path"/>
<if condition='isNull("LOG_PATH_SPRING")'>
<then>
<property name="LOG_PATH" value="./logs/${APPLICATION_NAME}"/>
</then>
<else>
<property name="LOG_PATH" value="${LOG_PATH_SPRING}"/>
</else>
</if>
<!-- 定义日志输出格式和颜色 -->
<property name="LOG_FORMAT_ONE" value="%red(%d{yyyy-MM-dd HH:mm:ss.SSS}) %green([%thread]) %blue([%-5level]) %cyan(%logger{36}:%line) %msg%n"/>
<property name="LOG_FORMAT_TWO" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%-5level] %logger{36}:%line %msg%n"/>
</included>
banmoon-logback-append.xml
<?xml version="1.0" encoding="UTF-8"?>
<included>
<!-- 输出到控制台 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<!-- 日志输出编码格式化 -->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>${LOG_FORMAT_ONE}</Pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 时间日期滚动日志 -->
<appender name="FILE_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 输出的日志远程,当天的日志名称 -->
<file>${LOG_PATH}/info.log</file>
<!-- 策略配置 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 保存归纳的日志 -->
<fileNamePattern>${LOG_PATH}/%d{yyyy-MM-dd}/info_%i.log</fileNamePattern>
<!-- 日志文件最大尺寸 -->
<maxFileSize>10MB</maxFileSize>
<!--日志文件保留天数-->
<MaxHistory>5</MaxHistory>
</rollingPolicy>
<!-- 日志输出编码格式化 -->
<encoder>
<pattern>${LOG_FORMAT_TWO}</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 时间日期滚动日志,只记录error级别的日志 -->
<appender name="FILE_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 输出的日志远程,当天的日志名称 -->
<file>${LOG_PATH}/error.log</file>
<!-- 策略配置 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 保存归纳的日志 -->
<fileNamePattern>${LOG_PATH}/%d{yyyy-MM-dd}/error_%i.log</fileNamePattern>
<!-- 日志文件最大尺寸 -->
<maxFileSize>10MB</maxFileSize>
<!--日志文件保留天数-->
<MaxHistory>5</MaxHistory>
</rollingPolicy>
<encoder>
<pattern>${LOG_FORMAT_TWO}</pattern>
<charset>UTF-8</charset>
</encoder>
<!-- 过滤器,日志级别过滤,仅输出error日志 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 指定输出的日志等级,root代表工程所有包 -->
<root level="INFO">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE_INFO"/>
<appender-ref ref="FILE_ERROR"/>
</root>
<!-- 指定输出的日志等级,指定包路径,此包下都以设置的等级输出 -->
<!-- additivity表示日志是否向上传递,如果为true,日志在root可能会再次打印 -->
<logger name="com.banmoon.**.mapper" level="DEBUG" additivity="false">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE_INFO"/>
</logger>
</included>
banmoon-logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<included>
<!-- 引入定义参数 -->
<include resource="com/banmoon/logging/banmoon-logback-defined.xml"/>
<!-- 引入日志输出定义 -->
<include resource="com/banmoon/logging/banmoon-logback-append.xml"/>
<!-- 本地环境,开发环境,测试环境 -->
<springProfile name="local | dev | test">
<logger name="com.banmoon" level="DEBUG" additivity="false">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE_INFO"/>
</logger>
</springProfile>
<!-- 生产环境 -->
<springProfile name="prod">
<logger name="com.banmoon" level="INFO" additivity="false">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE_INFO"/>
</logger>
</springProfile>
</included>
由于我放的位置在scr/main/java
中,注意maven
编译后,文件还存不存在
上面这三份文件的root
标签,是included
还没有结束,我们要在SpringBoot
项目中用起来,可以这样引入
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="30 seconds" debug="false">
<include resource="com/banmoon/logging/banmoon-logback.xml"/>
</configuration>
由于banmoon-logback-defined.xml
中使用了if
标签,请确保引入了下面这个依赖
<dependency>
<groupId>org.codehaus.janino</groupId>
<artifactId>janino</artifactId>
</dependency>
上面的设置好了后,我们就可以正常使用了