SpringBoot日志系统配置

日志门面和框架

SpringBoot日志系统配置_第1张图片
我们在项目中一般不直接使用日志实现框架,而是使用外观模式:日志门面组件+桥接器+日志实现框架,这样即使项目更换日志种类,只需更换桥接器和日志实现框架,也就是只更换Jar包就可以了,代码无需做任何改动。

通常使用:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
不会直接用:
import org.apache.log4j.Logger;

SpringBoot的SpringBoot-starter包中只带了slf4j+Logback日志框架,并且带有部分常用的桥接器.

SpringBoot日志系统配置_第2张图片
统一日志框架使用步骤归纳如下:

  1. 排除系统中的其他日志框架。(在maven中, 在其他工具或者插件的dependency中使用exculsion标签)
    SpringBoot日志系统配置_第3张图片

  2. 使用中间包替换要替换的日志框架。(下图中,如果将使用log4j框架的应用重定向到使用logback, 通过springboot-starter中自带的log4j-over-slf4j.jar实现)

  3. 导入我们选择的 SLF4J 实现。

SpringBoot日志系统配置_第4张图片

SpringBoot日志使用

import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
public class LogbackTest {
    
    Logger logger = LoggerFactory.getLogger(getClass());

    @Test
    public void testLog() {
        logger.trace("Trace 日志...");
        logger.debug("Debug 日志...");
        logger.info("Info 日志...");
        logger.warn("Warn 日志...");
        logger.error("Error 日志...");
    }
}

日志框架参数配置

可以在application.properties文件中配置, 使用:

# 控制台和日志文件输出格式
logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
# 日志输出路径,默认文件spring.log
logging.path=systemlog
#logging.file=log.log

但强烈建议在resource下面新建logback-spring.xml文件,在文件中统一配置

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
	
	<!-- property是文件常量定义-->
	<!--各项目日志保存统一父目录->路径自己设置绝对路径和相对路径都可以-->
	<property name="LOG_HOME" value="f://demo//logs"/>
	
	<!--设置上下文,可将定义的contextName放入日志格式中 -->
	<contextName>demo</contextName>
	
	<!--读入logback自带的日志配置,包括颜色,基本格式,console和file,下面可用同名标签覆盖,将C:\Users\shelley\.m2\repository\org\springframework\boot\spring-boot\2.1.0.RELEASE\spring-boot-2.1.0.RELEASE.jar解压,/org/springframework/boot/logging/logback/base.xml就可看到-->
	<include resource="org/springframework/boot/logging/logback/base.xml"/>

	<!--最大保存天数-->
	<property name="KEEP_MAX_DAY" value="180" />
	<!--总最大保存文件大小-->
	<property name="KEEP_TOTAL_MAX_SIZE" value="1GB" />
	<!--单文件最大保存文件大小-->
	<property name="KEEP_FILE_MAX_SIZE" value="50MB" />
	
	<!-- 覆盖base.xml中default的文件输出地址和格式 -->
	<appender name="FILE"  class="ch.qos.logback.core.rolling.RollingFileAppender">   
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <FileNamePattern>${LOG_HOME}/springboot.log.%d{yyyy-MM-dd}.log</FileNamePattern> 
            <!--日志文件保留天数-->
            <MaxHistory>${KEEP_MAX_DAY}</MaxHistory>
        </rollingPolicy>   
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> 
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> 
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>   
        </encoder> 
        <!--日志文件最大的大小-->
       <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
         <MaxFileSize>${KEEP_FILE_MAX_SIZE}</MaxFileSize>
       </triggeringPolicy>
    </appender> 
	
	<!--
        <logger>用来设置某一个包或者具体的某一个类(某个第三方插件/工具)的日志打印级别、
        以及指定<appender><logger>仅有一个name属性,
        一个可选的level和一个可选的addtivity属性。
        name:用来指定受此logger约束的某一个包或者具体的某一个类。
        level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,
              还有一个特俗值INHERITED或者同义词NULL,代表强制执行上级的级别。
              如果未设置此属性,那么当前logger将会继承上级的级别。
        addtivity:是否向上级logger传递打印信息。默认是true-->

	<logger name="org.springframework.jdbc.core" level="debug" additivity="false">
		<appender-ref ref="CONSOLE" />
		<appender-ref ref="FILE" />
	</logger>

	<logger name="com.springboot.web.dynamic_debug" level="debug" additivity="false">
		<appender-ref ref="CONSOLE" />
		<appender-ref ref="FILE" />
	</logger>
	
	<!-- 配置后可以看到sql执行日志 -->
	<logger name="com.example.demo.dao" level="debug" additivity="false">
		<appender-ref ref="CONSOLE" />
		<appender-ref ref="FILE" />
	</logger>
	
	<!-- 特定properties文件启动时,日志的输出级别和方式 -->
	<springProfile name="qa">
        <root level="info">
            <appender-ref ref="CONSOLE"/>
            <appender-ref ref="FILE"/>
        </root>
    </springProfile>
	
	<!--日志打印级别从低级到高级排序的顺序是:
	TRACE < DEBUG < INFO < WARN < ERROR
	 系统日志的默认输出级别和方式 -->
	<root level="info">
		<appender-ref ref="CONSOLE" />
		<appender-ref ref="FILE" />
	</root>

</configuration>

参考文档:
https://blog.csdn.net/qq_37859539/article/details/82464745
https://www.jianshu.com/p/1ded57f6c4e3

你可能感兴趣的:(IT)