logback 配置

DAY DAY UP 2021年03月19日 300次浏览

logback 配置

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
	<include
		resource="org/springframework/boot/logging/logback/defaults.xml" />

	<appender name="CONSOLE"
		class="ch.qos.logback.core.ConsoleAppender">
		<encoder>
			<pattern>${CONSOLE_LOG_PATTERN}</pattern>
			<charset>UTF-8</charset>
		</encoder>
	</appender>
	<appender name="fill-in-submit"
			  class="ch.qos.logback.core.rolling.RollingFileAppender">
		<encoder>
			<pattern>${FILE_LOG_PATTERN}</pattern>
		</encoder>
		<file>${LOG_PATH}/fill-in-submit.log</file>
		<!-- <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> -->
		<rollingPolicy
				class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
			<fileNamePattern>${LOG_PATH}/system/%d{yyyy-MM-dd}/log/fill-in-submit.%i.log
			</fileNamePattern>
			<!--<FileNamePattern>${LOG_PATH}/%d{yyyy-MM-dd}/fill-in-submit.%i.log</FileNamePattern>-->
			<maxFileSize>30MB</maxFileSize>
			<maxHistory>30</maxHistory>
			<totalSizeCap>30GB</totalSizeCap>
		</rollingPolicy>
	</appender>
	<appender name="ROLLING-FILE"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<encoder>
			<pattern>${FILE_LOG_PATTERN}</pattern>
			<charset>UTF-8</charset>
		</encoder>
		<file>${LOG_FILE}</file>
		<rollingPolicy
			class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
			<!--<fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>-->
			<fileNamePattern>${LOG_PATH}/system/%d{yyyy-MM-dd}/${LOG_FILE}.%i.log</fileNamePattern>
			<!-- each file should be at most 10MB -->
			<!-- keep 30 days worth of history, but at most 1GB -->
			<maxFileSize>30MB</maxFileSize>
			<maxHistory>30</maxHistory>
			<totalSizeCap>10GB</totalSizeCap>
		</rollingPolicy>
	</appender>

	<appender name="FILE-API" class="ch.qos.logback.classic.sift.SiftingAppender">

		<!-- This is MDC value -->
		<!-- We will assign a value to 'logFileName' via Java code -->
		<discriminator>
			<key>logFileName</key>
			<defaultValue>system-api</defaultValue>
		</discriminator>

		<sift>
			<!-- A standard RollingFileAppender, the log file is based on 'logFileName' at runtime  -->
			<appender name="FILE-${logFileName}"
					  class="ch.qos.logback.core.rolling.RollingFileAppender">
				<!--<file>${LOG_PATH}/%d{yyyy-MM-dd}/${logFileName}.log</file>-->
				<!--<file>
                    ${LOG_PATH}/%d{yyyy-MM-dd,aux}/system.%d{yyyy-MM-dd-HH-mm}.log
                </file>-->

				<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
					<Pattern>
						%d{yyyy-MM-dd HH:mm:ss} %mdc [%thread] %level %logger{35} - %msg%n
					</Pattern>
				</encoder>
				<rollingPolicy
						class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
					<fileNamePattern>${LOG_PATH}/api/%d{yyyy-MM-dd}/${logFileName}.%i.log
					</fileNamePattern>
					<maxFileSize>30MB</maxFileSize>
					<!-- 保存日志天数-->
					<maxHistory>30</maxHistory>
					<totalSizeCap>10GB</totalSizeCap>
				</rollingPolicy>
			</appender>
		</sift>
	</appender>

	<!--<logger name="com.linewell.form.server.framework.util.HttpClientOperator" level="INFO" 	additivity="false">-->
	<logger name="loggerApi" level="INFO" 	additivity="false">
		<!-- additivity false  子 appender 打印了日志,父日志不打印 -->
		<appender-ref ref="FILE-API" />
	</logger>

	<!-- 级别从低到高:TRACE、DEBUG、INFO、WARN、ERROR;打印等于或高于本级别的日志 -->
	<logger name="org.springframework" level="INFO" />
	<logger name="com.linewell.form.server" level="DEBUG" />
	<!-- 设置ShardingSphere-SQL日志输出等级 -->
	<logger name="ShardingSphere-SQL" level="DEBUG"/>
	<logger name="fillinsubmit" level="INFO" additivity="false">
		<appender-ref ref="fill-in-submit"></appender-ref>
	</logger>
	<root level="ERROR">
		<appender-ref ref="CONSOLE" />
		<appender-ref ref="ROLLING-FILE" />
	</root>
</configuration>

配置简要说明

  1. 支持应用 '$' 环境变量, 可在spring 容器初始化时 init方式注入
<file>${LOG_PATH}/fill-in-submit.log</file>
  1. 动态创建 日志文件名,MDC 方式传入变量,logFileName 变量, 需要设置 defalutValue
<appender name="FILE-API" class="ch.qos.logback.classic.sift.SiftingAppender">

		<!-- This is MDC value -->
		<!-- We will assign a value to 'logFileName' via Java code -->
		<discriminator>
			<key>logFileName</key>
			<defaultValue>system-api</defaultValue>
		</discriminator>

		<sift>
			<!-- A standard RollingFileAppender, the log file is based on 'logFileName' at runtime  -->
			<appender name="FILE-${logFileName}"
					  class="ch.qos.logback.core.rolling.RollingFileAppender">
				<!--<file>${LOG_PATH}/%d{yyyy-MM-dd}/${logFileName}.log</file>-->
				<!--<file>
                    ${LOG_PATH}/%d{yyyy-MM-dd,aux}/system.%d{yyyy-MM-dd-HH-mm}.log
                </file>-->

				<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
					<Pattern>
						%d{yyyy-MM-dd HH:mm:ss} %mdc [%thread] %level %logger{35} - %msg%n
					</Pattern>
				</encoder>
				<rollingPolicy
						class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
					<fileNamePattern>${LOG_PATH}/api/%d{yyyy-MM-dd}/${logFileName}.%i.log
					</fileNamePattern>
					<maxFileSize>30MB</maxFileSize>
					<!-- 保存日志天数-->
					<maxHistory>30</maxHistory>
					<totalSizeCap>10GB</totalSizeCap>
				</rollingPolicy>
			</appender>
		</sift>
	</appender>
  1. 设置打印日志级别,才能输出日志
<logger name="loggerApi" level="INFO" 	additivity="false">
<!-- additivity false  子 appender 打印了日志,父日志不打印 -->
<appender-ref ref="FILE-API" />
</logger>
  1. 日志文件大小限制,日志保存天数
<maxFileSize>30MB</maxFileSize>
<!-- 保存日志天数-->
<maxHistory>30</maxHistory>
<totalSizeCap>10GB</totalSizeCap>

每个文件最大30M ,日志文件保存30天,所有日志文件总和 10GB, 例如 日志按日期存放,触发了 日志总和 10GB ,会自动删除 旧的日期 里的日志,始终保持日志总和 10GB