springboot集成logback
1、配置logback-spring.xml
logback-spring.xml是官方推荐的命名方法,你也可以取其他的名字,如:logback.xml,但还是建议取名为logback-spring.xml。具体配置如下:
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<!-- 定义日志存放目录 -->
<property name="logPath" value="d:/project_log" />
<!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 -->
<!-- 控制台日志 -->
<appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d - %msg%n</pattern>
</layout>
</appender>
<!-- debug日志,记录查询语句 -->
<appender name="fileDebugLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>DEBUG</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<!-- 设置日志输出格式 -->
<encoder>
<pattern>%date %-5level %logger{5} - %msg%n</pattern>
<!-- 设置编码格式,以防中文乱码 -->
<charset class="java.nio.charset.Charset">UTF-8</charset>
</encoder>
<!-- 当前日这个类型的所有日志。当日志超出下面设置的大小会分割压缩放到debug文件夹下,但debug.log不改变,直到第二天才会重置 -->
<File>${logPath}/debug.log</File>
<!--滚动策略,靠这个来生成不同文件。 TimeBasedRollingPolicy 不能设置文件大小,所以用SizeAndTimeBasedRollingPolicy-->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--日志存放路径。注意路径后面如果加.zip等压缩文件类型结尾的,超过单个文件最大值进行分割时会自动对文件进行压缩-->
<fileNamePattern>${logPath}/debug/debug.%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
<!-- 日志文件保留天数,超过这个则删除旧的日志 -->
<MaxHistory>30</MaxHistory>
<!-- 日志文件最大值,超过则进行分割 -->
<maxFileSize>20MB</maxFileSize>
<!-- 日志保留最大的值,超过这个则删除旧的日志 -->
<totalSizeCap>2GB</totalSizeCap>
<!-- 设置这个启动时MaxHistory才生效,才会删日志 -->
<cleanHistoryOnStart>true</cleanHistoryOnStart>
</rollingPolicy>
</appender>
<!-- 普通日志 -->
<appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<!-- 设置日志输出格式 -->
<encoder>
<pattern>%date %-5level %logger{5} - %msg%n</pattern>
<!-- 设置编码格式,以防中文乱码 -->
<charset class="java.nio.charset.Charset">UTF-8</charset>
</encoder>
<!-- 当前日这个类型的所有日志。当日志超出下面设置的大小会分割压缩放到info文件夹下,但info.log不改变,直到第二天才会重置 -->
<File>${logPath}/info.log</File>
<!--滚动策略,靠这个来生成不同文件。 TimeBasedRollingPolicy 不能设置文件大小,所以用SizeAndTimeBasedRollingPolicy-->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--日志存放路径。注意路径后面如果加.zip等压缩文件类型结尾的,超过单个文件最大值进行分割时会自动对文件进行压缩-->
<fileNamePattern>${logPath}/info/info.%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
<!-- 日志文件保留天数,超过这个则删除旧的日志 -->
<MaxHistory>30</MaxHistory>
<!-- 日志文件最大值,超过则进行分割 -->
<maxFileSize>20MB</maxFileSize>
<!-- 日志保留最大的值,超过这个则删除旧的日志 -->
<totalSizeCap>2GB</totalSizeCap>
<!-- 设置这个启动时MaxHistory才生效,才会删日志 -->
<cleanHistoryOnStart>true</cleanHistoryOnStart>
</rollingPolicy>
</appender>
<!-- 警告日志 -->
<appender name="fileWarnLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>WARN</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<!-- 设置日志输出格式 -->
<encoder>
<pattern>%date %-5level %logger{5} - %msg%n</pattern>
<!-- 设置编码格式,以防中文乱码 -->
<charset class="java.nio.charset.Charset">UTF-8</charset>
</encoder>
<!-- 当前日这个类型的所有日志。当日志超出下面设置的大小会分割压缩放到info文件夹下,但warn.log不改变,直到第二天才会重置 -->
<File>${logPath}/warn.log</File>
<!--滚动策略,靠这个来生成不同文件。 TimeBasedRollingPolicy 不能设置文件大小,所以用SizeAndTimeBasedRollingPolicy-->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--日志存放路径。注意路径后面如果加.zip等压缩文件类型结尾的,超过单个文件最大值进行分割时会自动对文件进行压缩-->
<fileNamePattern>${logPath}/warn/warn.%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
<!-- 日志文件保留天数,超过这个则删除旧的日志 -->
<MaxHistory>30</MaxHistory>
<!-- 日志文件最大值,超过则进行分割 -->
<maxFileSize>20MB</maxFileSize>
<!-- 日志保留最大的值,超过这个则删除旧的日志 -->
<totalSizeCap>2GB</totalSizeCap>
<!-- 设置这个启动时MaxHistory才生效,才会删日志 -->
<cleanHistoryOnStart>true</cleanHistoryOnStart>
</rollingPolicy>
</appender>
<!-- 错误日志 -->
<appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 拦截处理ERROR级别的日志 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<!-- 设置日志输出格式 -->
<encoder>
<pattern>%date %-5level %logger{5} - %msg%n</pattern>
<!-- 设置编码格式,以防中文乱码 -->
<charset class="java.nio.charset.Charset">UTF-8</charset>
</encoder>
<!-- 当前日这个类型的所有日志。当日志超出下面设置的大小会分割压缩放到info文件夹下,但error.log不改变,直到第二天才会重置 -->
<File>${logPath}/error.log</File>
<!--滚动策略,靠这个来生成不同文件。 TimeBasedRollingPolicy 不能设置文件大小,所以用SizeAndTimeBasedRollingPolicy-->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--日志存放路径。注意路径后面如果加.zip等压缩文件类型结尾的,超过单个文件最大值进行分割时会自动对文件进行压缩-->
<fileNamePattern>${logPath}/error/error.%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
<!-- 日志文件保留天数,超过这个则删除旧的日志 -->
<MaxHistory>30</MaxHistory>
<!-- 日志文件最大值,超过则进行分割 -->
<maxFileSize>20MB</maxFileSize>
<!-- 日志保留最大的值,超过这个则删除旧的日志 -->
<totalSizeCap>2GB</totalSizeCap>
<!-- 设置这个启动时MaxHistory才生效,才会删日志 -->
<cleanHistoryOnStart>true</cleanHistoryOnStart>
</rollingPolicy>
</appender>
<root level="info">
<appender-ref ref="consoleLog" />
<appender-ref ref="fileInfoLog" />
<appender-ref ref="fileErrorLog" />
<appender-ref ref="fileWarnLog" />
</root>
<!-- 记录sql语句 -->
<logger name="com.project.base.dao" level="debug" >
<appender-ref ref="fileDebugLog" />
</logger>
<!-- 全局log -->
<logger name="com.project" level="info"/>
</configuration>
滚动策略可以复制粘贴,主要是需不需要打印这些类型的日志,不需要这种类型的日志直接删掉,不进行配置就可以了就可以了。控制台感觉没必要保留。日志保留天数自己修改想要的天数。
<logger>标签里是你自己的项目中需要输出日志的根包路径
下面对这些配置信息做一些说明:
appender——用于确定日志输出到什么日志文件中去或是输出到控制台
appender下的filter——确定使用什么样的过滤器来过滤将要输出的日志,本例中输出到日志文件的过滤器使用的是ch.qos.logback.classic.filter.LevelFilter,该过滤器下有三个标签<level></level>、<onMatch></onMatch>、<onMismatch></onMismatch>,
<onMatch>ACCEPT</onMatch>表示,当将要打印的日志级别符合<level></level>中定义的级别时,就输出;
<onMismatch>DENY</onMismatch>表示,当将要打印的日志级别不符合中定义的级别时,会拒绝输出。如在代码中有一行这样的日志
log.info(“info log msg”);
log.debug(“debug log msg”);
log.error(“error log msg”);
对于如下配置来说:
<level>info</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
该过滤器会输出"info log msg",而"debug log msg"和"error log msg"都不会输出。这样就做到了将日志按级别分别进行输出的目的。
可能有人会有疑问,为什么在标签下有一个level,在过滤器filter中也有一个level。
<logger/>标签下的level决定,什么样的日志有机会被输出,而filter中的日志决定将日志按什么样的规则输出到日志文件中去。
我们可以认为是,logger中的level才是决定日志是否能被打印,filter让日志变得更可控,或是二次筛选。这个需要一段时间去理解一下,一时不明白,就先按照上面的配置来,我想有一天会明白的。
参考:https://blog.csdn.net/shangcunshanfu/article/details/103037528
2、配置application.properties
在application.properties里面加上
##logback日志相关
logging.config=classpath:logback-spring.xml