Spring-Boot官方开发指导文档

 

SpringBoot默认采用了logback日志系统,也支持Log4j2、JDK (Java Util Logging)、SLF4J、Commons Logging等。下面说一下logback日志系统在SpringBoot中的配置。

 

如果日志需求简单,可以直接在application.properties中配置logback日志属性,否则可以自定义logback日志文件位置,然后根据自己需要配置logback内容。下面是一部分常用配置属性:

 

logging.file=xxxx.log  //该属性指定日志文件名称

logging.path=/xxx/xxx   //日志文件存储目录,当前目录 . 。

logging.file.max-size=2MB //单个日志文件大小,

logging.file.max-history=30 //日志文件保存30天的

logging.level.root=INFO //root日志打印级别

logging.level.xxx.xxx.xx=INFO //指定类或者包打印日志级别

 

项目中使用时,private Logger logger = LoggerFactory.getLogger(XXX.class);即可,该Logger为SLF4J的导入类。

 

日志系统在实际项目中一般需要个性化配置,所以可以通过下面的属性指定配置文件位置

logging.config=xxxxx

//该属性配置自定义日志文件位置,如果位于classpath根目录下,则直接填写文件名称即可。本例中使用logback, 位置位于src/main/resources/log下,配置应为:

logging.config=classpath:log/logback-spring.xml

关于logback配置文件名称,springboot官网推荐尽可能不要叫logback.xml,因为该文件在启动时就会加载,加载非常早,会导致配置文件中的springboot标签不识别。所以推荐命名xxxxx-spring.xml形式。

 

在springboot中的logback除了本身的标签外,还增加了<springProfile> 、 <springProperty>标签。

springProfile标签用于区分各个环境下配置文件,在application.properties中配置了spring.profiles.active=xxx后,该标签会加载指定的日志配置文件。

如:logback-spring.xml

 

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true" scan="true" scanPeriod="60 seconds">
		<!-- scan日志刷新 scanPeriod不带单位时,单位为毫秒 -->
	<!-- 控制台输出 -->
	<appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
			<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} -	%msg%n</pattern>
		</encoder>
	</appender>
		
		<!-- springProfile是springboot标签,可以配置运行时激活的配置 ,
	另外还有springProperty可以读取properties内的属性值应用到logback配置文件中
		-->
	<springProfile name="dev">
		<include resource="log/logback-spring-dev.xml" />
	</springProfile>

	<springProfile name="test">
		<include resource="log/logback-spring-test.xml" />
	</springProfile>

	<springProfile name="pro">
		<include resource="log/logback-spring-pro.xml" />
	</springProfile>

</configuration>

其中logback-spring-dev.xml、logback-spring-test.xml、logback-spring-pro.xml三个配置文件分别是开发、测试、生产环境下的日志配置信息。

 

logback-spring-dev.xml如下:其他不再列举

 

<?xml version="1.0" encoding="UTF-8"?>
<included>
		<!-- 属性定义使用以及ref参照使用,必须有顺序,使用前必须已定义-->
		
	<!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径 -->
	<property name="LOG_HOME" value="D:/logs" />

	<!-- 按照每天生成日志文件 -->
	<appender name="File"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<!--日志文件输出的文件名 -->
			<FileNamePattern>${LOG_HOME}/springboot.log.%d{yyyy-MM-dd}.log
			</FileNamePattern>
			<!--日志文件保留天数 -->
			<MaxHistory>30</MaxHistory>
		</rollingPolicy>
		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
			<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
		</encoder>
		<!--日志文件最大的大小 -->
		<triggeringPolicy
			class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
			<MaxFileSize>2MB</MaxFileSize>
		</triggeringPolicy>
	</appender>
	
		<!-- 可以指定包或者类 -->
		<logger name="com.tom" level="INFO">
			<appender-ref ref="File"></appender-ref>
		</logger>
		
		<!-- 日志输出级别 -->
		<root level="INFO">
			<appender-ref ref="Console" />
		</root>

</included>
 

 

springProperty标签用于读取spring环境中property配置的属性值,springProperty有name属性,与logback中标签property作用类似,可以在配置文件的下文中通过${name}读取值。logback中配置定义有顺序,取值或者引用必须先声明后引用。

官文例子:

 

<springProperty scope="context" name="fluentHost" source="myapp.fluentd.host"
		defaultValue="localhost"/>
<appender name="FLUENT" class="ch.qos.logback.more.appenders.DataFluentAppender">
	<remoteHost>${fluentHost}</remoteHost>
	....
</appender>

此外,对于logback的变量取值${variableName},还支持默认值设置,比如:${LOG_HOME:-log}, 注意冒号后面要有个短横线  - , 横线后面的就是默认值,此外默认值也支持取定义好的变量如:${LOG_HOME:-${DEF_DIR}}


注意:使用springProperty springProfile标签则logback配置文件命名必须采用logback-spring.xml,否则spring标签不识别,控制台出现no applicable action for [springProperty]...的WARN警告。

另外在logback-spring.xml中用到的properties属性尽量放在bootstrap.yml/properties文件中,bootstrap配置文件会在启动时首先加载,放到applicaiton.yml/properties中不会启动时马上加载,会出现刚开始启动时取不到值过会启动好了才取到值的情况。

 

附:logback

 

GitHub 加速计划 / sp / spring-boot
73.97 K
40.4 K
下载
spring-projects/spring-boot: 是一个用于简化Spring应用开发的框架。适合用于需要快速开发企业级Java应用的项目。特点是可以提供自动配置、独立运行和内置的Tomcat服务器,简化Spring应用的构建和部署。
最近提交(Master分支:2 个月前 )
fdf24c6c Closes gh-42976 10 天前
3c42ba8c * pr/42974: Fix copyright year of updated file Polish Closes gh-42974 10 天前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐