SpringBoot中,不同环境的日志配置

SpringBoot中,不同环境的日志配置

日志的配置,不同的环境对于日志的处理方式也是不同的。例如开发环境,我们需要日志打印到控制台,可以及时的调试,但是没有太大的必要输出到文件。但是呢生产环境,一般只需要序列化到文件。而不需要输出到控制台。而且生产环境的日志打印级别一般都是在 INFO 以上,而开发环境肯定是 DBUG

以前对于不同环境的日志处理方式

yaml配置

通过不同的 profile 去加载不同的日志配置文件

logging:
  config: classpath:logback-${spring.profiles.active}.xml

这样的弊端显而易见,需要创建,维护多个不同的日志文件。

使用 springProfile

参考: https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-logging.html#_environment_properties

可以在 spring-logback.xml 中的 configuration 节点下配置 springProfile 节点

它有一个name属性, 只有在当前profile环境下才会加载该节点下的内容

<springProfile name="staging"></springProfile>

demo

<configuration>
	.... 忽略其他的配置

	<!-- 控制台输出 -->
	<appender name="console"
		class="ch.qos.logback.core.ConsoleAppender">
		<encoder>
			<pattern>${CONSOLE_LOG_PATTERN}</pattern>
		</encoder>
	</appender>

	<!-- 开发环境 -->
	<springProfile name="dev">
		<root level="DEBUG">
			<appender-ref ref="console" />
		</root>
	</springProfile>
	
	<!-- 生产环境 -->
	<springProfile name="pro">
		<!-- 输出到文件 -->
		<appender name="rolling" class="ch.qos.logback.core.rolling.RollingFileAppender">
			<file>production.log</file>
			<rollingPolicy
				class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
				<maxFileSize>100MB</maxFileSize>
				<fileNamePattern>%d{yyyy-MM-dd}-%i.zip</fileNamePattern>
				<maxHistory>60</maxHistory>
				<totalSizeCap>1GB</totalSizeCap>
			</rollingPolicy>
			<encoder>
				<pattern>${FILE_LOG_PATTERN}</pattern>
			</encoder>
		</appender>
		<root level="DEBUG">
			<appender-ref ref="rolling" />
		</root>
	</springProfile>
</configuration>

还支持表达式

只有 spring.profiles.active=staging 才会激活

<springProfile name="staging"></springProfile>

只有 spring.profiles.active=staging 或着 spring.profiles.active=dev 才会激活

<springProfile name="dev | staging"></springProfile>

只有不是 spring.profiles.active=production 才会激活

<springProfile name="!production"></springProfile>

通过配置 springProfile,只需要维护一个日志文件,就可以在不同的环境下,使用不同的日志配置。

1赞