最全SpringBoot日志配置-按照日期和日志级别进行归档

指定日志文件路径

spring的配置文件中配置:

logging:
  config: classpath:logback.xm

日志配置

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="tue" scanPeriod="60 seconds"
	debug="false">

	<!-- application.yml 传递参数,不能使用logback 自带的<property>标签 -->
	<!-- 日志输出路径,在yml文件中配置 -->
	<springProperty scope="context" name="logdir"
		source="logback.logdir" />
	<!-- 文件名 -->
	<springProperty scope="context" name="logName"
		source="logback.name" />

	<!-- 输出到控制台 Consoleappender -->
	<appender name="consoleLog"
		class="ch.qos.logback.core.ConsoleAppender">
		<!-- 展示格式 layout -->
		<layout class="ch.qos.logback.classic.PatternLayout">
			<pattern>%d{yyyy/MM/dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
		</layout>
	</appender>

	<!-- infoLog 输出 -->
	<appender name="fileInfoLog"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<!-- 如果只是想要 info 级别的日志,只是过滤 info 还是会输出 error 日志,因为 Error 的日志级别更高。 使用下面的策略,可以避免输出 
			Error 日志 -->
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<!-- 过滤 Error -->
			<level>ERROR</level>
			<!-- 匹配到就禁止 -->
			<onMatch>DENY</onMatch>
			<!-- 没有匹配到就允许 -->
			<onMismatch>ACCEPT</onMismatch>
		</filter>

		<!-- 日志名称,如果没有 File 属性,name只会使用FileNamePattern的文件路径规则 如果同时又<File>和<FileNamePattern>,那么当天日志时<File>.明天会自动把今天的日志名改为今天的日期 
			即:<File> 的日志都是当天的。 -->
		<File>${logdir}/info.${logName}.log</File>
		<!-- 滚动策略,按照时间滚动 TimeBasedRollingPolicy -->
		<rollingPolicy
			class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<!-- 文件路径,定义了日志的切分方式 把每一天的日志归档到一个文件中,以防止日志填满整个磁盘空间 -->
			<FileNamePattern>${logdir}/info.${logName}.%d{yyyy-MM-dd}.log</FileNamePattern>
			<!-- 设置 日志保留时间 30天 -->
			<maxHistory>30</maxHistory>
			<!-- 用来指定日志文件的上限大小,到上限之后会删除旧日志 -->
			<!-- <totalSizeCap>1GB</totalSizeCap> -->
		</rollingPolicy>

		<!-- 日志输出编码格式化 -->
		<encoder>
			<charset>UTF-8</charset>
			<pattern>%d{yyyy/MM/dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
		</encoder>
	</appender>

	<!-- Error 级别日志文件 -->
	<appender name="fileErrorLog"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<!-- 如果只是想要 Error 级别的日志,那么需要过滤一下.默认是info 级别的,ThresholdFilter -->
		<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
			<level>Error</level>
		</filter>
		<!-- 日志名称,如果没有 File 属性,name只会使用FileNamePattern的文件路径规则 如果同时又<File>和<FileNamePattern>,那么当天日志时<File>.明天会自动把今天的日志名改为今天的日期 
			即:<File> 的日志都是当天的。 -->
		<File>${logdir}/error.${logName}.log</File>
		<!-- 滚动策略,按照时间滚动 TimeBasedRollingPolicy -->
		<rollingPolicy
			class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<!-- 文件路径,定义了日志的切分方式 把每一天的日志归档到一个文件中,以防止日志填满整个磁盘空间 -->
			<FileNamePattern>${logdir}/error.${logName}.%d{yyyy-MM-dd}.log</FileNamePattern>
			<!-- 设置 日志保留时间 30天 -->
			<maxHistory>30</maxHistory>
			<!-- 用来指定日志文件的上限大小,到上限之后会删除旧日志 -->
			<!-- <totalSizeCap>1GB</totalSizeCap> -->
		</rollingPolicy>

		<!-- 日志输出编码格式化 -->
		<encoder>
			<charset>UTF-8</charset>
			<pattern>%d{yyyy/MM/dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
		</encoder>
	</appender>

	<!-- 开发环境日志级别为DEBUG ,可以使用逗号分隔列表指定多个配置文件 -->
	<springProfile name="dev">
		<root level="INFO">
			<appender-ref ref="consoleLog" />
			<appender-ref ref="fileInfoLog" />
			<appender-ref ref="fileErrorLog" />
		</root>
	</springProfile>
	
	<springProfile name="test,prod">
		<root level="INFO">
		<appender-ref ref="consoleLog" />
		<appender-ref ref="fileInfoLog" />
		<appender-ref ref="fileErrorLog" />
		</root>
	</springProfile>
</configuration>
posted @ 2023-03-15 15:49  fengzeng  阅读(1082)  评论(0编辑  收藏  举报