Spring Boot 初级入门教程(七) —— 日志分类备份

版权声明:本文为博主原创文章,转载请注明文章链接。 https://blog.csdn.net/tzhuwb/article/details/81201243

在上一篇《Spring Boot 初级入门教程(二) —— 日志备份》中,只是简单说明了下日志的备份方法,并没有做更多的配置说明,这篇主要说一下如何分类备份不同的日志。

一、修改日志配置文件的文件名。

上篇中,创建的日志文件名为 logback.xml,开始配置前,想把文件名修改一下,修成成 logback-spring.xml,效果和原来一样,并不影响日志的保存。

那为什么要修改文件名了?官网上有这么一段说明:

When possible, we recommend that you use the -spring variants for your logging configuration (for example, logback-spring.xml rather than logback.xml). If you use standard configuration locations, Spring cannot completely control log initialization.

大概意思是:如果可能,我们建议您使用 -spring 变体进行日志记录配置(例如,logback-spring.xml 而不是 logback.xml)。 如果使用标准配置位置,Spring无法完全控制日志初始化。

Because the standard logback.xml configuration file is loaded too early, you cannot use extensions in it. You need to either use logback-spring.xml or define a logging.config property. 

大概意思是:由于标准 logback.xml 配置文件加载过早,因此无法在其中使用扩展。您需要使用 logback-spring.xml 或定义 logging.config 属性。

综上,既然官网建议用带 -spring 扩展的文件名,那就直接改了再说。运行项目,测试一下,日志还是可以保存,并不影响。

二、一次修改配置文件

首先查看控制台输出和配置文件输出,发现配置文件保存的内容,并没有控制台输出多,那么首先让控制台的输出和日志保存一致。

修改后的配置文件部分为:

	<root level="info">
		<appender-ref ref="STDOUT" />
		<appender-ref ref="baselog" />
	</root>
	<!-- <logger name="com.menglanglang.test.springboot" level="DEBUG">
		<appender-ref ref="baselog" />
	</logger> -->

再次运行,查看 base.log 内容,可以发现日志内容和控制台输出几乎一致了。当然,banner 信息和 banner 之前的信息,以及system.out 输出的内容,是不会进入日志的。

三、二次修改配置文件

目前日志输出是一份,可以发现里面有有 INFO、DEBUG、ERROR 等全部信息,新的需求是,想把日志拆分,如所有 ERROR 信息放到一个新文件,而没有其它 DEBUG 或者 INFO 信息,该如何配置。

修改后的配置文件为:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
	<!-- %m输出的信息,%p日志级别,%t线程名,%d日期,%c类的全名 -->
	<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
		<encoder>
			<pattern>%d %p (%file:%line\)- %m%n</pattern>
			<charset>UTF-8</charset>
		</encoder>
	</appender>

	<!-- 日志文件输出设置 -->
	<appender name="baselog" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<File>log/base.log</File>
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<fileNamePattern>log/base.log.%d.%i</fileNamePattern>
			<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
				<maxFileSize>10 MB</maxFileSize>
			</timeBasedFileNamingAndTriggeringPolicy>
		</rollingPolicy>
		<encoder>
			<pattern>%d %p (%file:%line\)- %m%n</pattern>
			<charset>UTF-8</charset>
		</encoder>
	</appender>

	<!-- TRACE 级别日志文件输出设置 -->
	<appender name="fileTraceLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<File>log/trace.log</File>
		<encoder>
			<pattern>%d{yyyy-MM-dd HH:mm:ss,SSS} %5p [%t] %replace(%caller{1}){'\t|Caller.{1}0|\r\n', ''} - %m%n</pattern>
			<charset>UTF-8</charset>
		</encoder>
		<!--滚动策略 -->
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<!--路径 -->
			<fileNamePattern>log/trace.log.%d.%i</fileNamePattern>
			<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
				<maxFileSize>1 MB</maxFileSize>
			</timeBasedFileNamingAndTriggeringPolicy>
			<maxHistory>3</maxHistory>
		</rollingPolicy>
	</appender>
	<!-- DEBUG 级别日志文件输出设置 -->
	<appender name="fileDebugLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<File>log/debug.log</File>
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>DEBUG</level>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch>
		</filter>
		<encoder>
			<pattern>%d{yyyy-MM-dd HH:mm:ss,SSS} %5p [%t] %replace(%caller{1}){'\t|Caller.{1}0|\r\n', ''} - %m%n</pattern>
			<charset>UTF-8</charset>
		</encoder>
		<!--滚动策略 -->
		<rollingPolicy
			class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<!--路径 -->
			<fileNamePattern>log/debug.log.%d.%i</fileNamePattern>
			<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
				<maxFileSize>1 MB</maxFileSize>
			</timeBasedFileNamingAndTriggeringPolicy>
			<maxHistory>3</maxHistory>
		</rollingPolicy>
	</appender>
	<!-- INFO 级别日志文件输出设置 -->
	<appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<File>log/info.log</File>
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>INFO</level>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch>
		</filter>
		<encoder>
			<pattern>%d{yyyy-MM-dd HH:mm:ss,SSS} %5p [%t] %replace(%caller{1}){'\t|Caller.{1}0|\r\n', ''} - %m%n</pattern>
			<charset>UTF-8</charset>
		</encoder>
		<!--滚动策略 -->
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<!--路径 -->
			<fileNamePattern>log/info.log.%d.%i</fileNamePattern>
			<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
				<maxFileSize>1 MB</maxFileSize>
			</timeBasedFileNamingAndTriggeringPolicy>
			<maxHistory>3</maxHistory>
		</rollingPolicy>
	</appender>
	<!-- WARN 级别日志文件输出设置 -->
	<appender name="fileWarnLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<File>log/warn.log</File>
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>WARN</level>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch>
		</filter>
		<encoder>
			<pattern>%d{yyyy-MM-dd HH:mm:ss,SSS} %5p [%t] %replace(%caller{1}){'\t|Caller.{1}0|\r\n', ''} - %m%n</pattern>
			<charset>UTF-8</charset>
		</encoder>
		<!--滚动策略 -->
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<!--路径 -->
			<fileNamePattern>log/warn.log.%d.%i</fileNamePattern>
			<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
				<maxFileSize>1 MB</maxFileSize>
			</timeBasedFileNamingAndTriggeringPolicy>
			<maxHistory>3</maxHistory>
		</rollingPolicy>
	</appender>
	<!-- ERROR 级别日志文件输出设置 -->
	<appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<File>log/error.log</File>
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>ERROR</level>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch>
		</filter>
		<encoder>
			<pattern>%d{yyyy-MM-dd HH:mm:ss,SSS} %5p [%t] %replace(%caller{1}){'\t|Caller.{1}0|\r\n', ''} - %m%n</pattern>
			<charset>UTF-8</charset>
		</encoder>
		<!--滚动策略 -->
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<!--路径 -->
			<fileNamePattern>log/error.log.%d.%i</fileNamePattern>
			<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
				<maxFileSize>1 MB</maxFileSize>
			</timeBasedFileNamingAndTriggeringPolicy>
			<maxHistory>3</maxHistory>
		</rollingPolicy>
	</appender>

	<root level="TRACE">
		<appender-ref ref="fileTraceLog" />
		<appender-ref ref="fileDebugLog" />
		<appender-ref ref="fileInfoLog" />
		<appender-ref ref="fileWarnLog" />
		<appender-ref ref="fileErrorLog" />
		<appender-ref ref="baselog" />
		<appender-ref ref="STDOUT" />
	</root>
	<!-- 自定义指定类的日志输出 -->
	<!-- <logger name="com.menglanglang.test.springboot" level="DEBUG"> <appender-ref 
		ref="baselog" /> </logger> -->
</configuration>

运行程序后,可以看到 log 目录下已经按照不同的级别输出日志了。

除了在 root 标签上设置 level 级别外,还可以在项目配置文件 application.properties 中,设置下面两个配置的任何一个,都可以设置日志级别。

# 日志显示级别
trace=true

# 设置日志级别
logging.level.root=TRACE

建议,在开发过程中,日志一版设置成 INFO 级别就足够了,如果设置成 TRACE 或者 DEBUG,日志文件将非常庞大,控制台输出太多 log 还将导致 IDE 卡死。

猜你喜欢

转载自blog.csdn.net/tzhuwb/article/details/81201243