Spring Boot Logger Configuration

Common

Log配置文件路径

logging.config=classpath:log4j2.properties


Level

日志级别从低到高分为:TRACE < DEBUG < INFO < WARN < ERROR < FATAL,例如Lvel为WARN,则忽略低于WARN的消息

Spring Boot中默认配置ERROR、WARN和INFO级别的日志输出到控制台。

运行命令配置

运行命令添加–debug标志来启用“调试”模式(开发的时候推荐开启)

1
java -jar springTest.jar --debug

properties配置

所有支持的日志记录系统都可以在Spring环境中设置记录级别(例如在application.properties中)格式为:logging.level.* = LEVEL

例如

1
2
logging.level.com.dudu=DEBUG # com.dudu 包下所有class以DEBUG级别输出
logging.level.root=WARN # root日志以WARN级别输出

在application.properties中配置debug=true,该属性置为true的时候,核心Logger(包含嵌入式容器、hibernate、spring等等)会输出更多内容,但是你自己应用的日志并不会输出为DEBUG级别。


Log Configuration File

  1. 根据不同的日志系统,你可以按如下规则组织配置文件名,就能被正确加载:
  • Logback:logback-spring.xml, logback-spring.groovy, logback.xml, logback.groovy
  • Log4j:log4j-spring.properties, log4j-spring.xml, log4j.properties, log4j.xml
  • Log4j2:log4j2-spring.xml, log4j2.xml
  • JDK (Java Util Logging):logging.properties
  1. Add hostname to log message
1
System.setProperty("hostName", InetAddress.getLocalHost().hostName)
1
2
3
4
5
6
7
8
9
10
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="host:${hostName}-%d{HH:mm:ss.SSS}-[%t]-%-5level-%logger{36}-%msg%n"/>
</Console>
</Appenders>
<Loggers>
</Loggers>
</Configuration>
  1. Java 设置 log4j2 的配置文件名字
1
2
3
4
5
6
//  src
// - main
// - java
// - resource
// - log4j2-uat.xml
-Dlog4j.configurationFile=log4j2-dev.xml
  1. SpringBoot 在properties设置配置文件名字
1
logging.config=classpath:/log4j2-dev.xml

Example

分别只打印 debug、info、error 日志到对应的log文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# 文件路径,在当前工程路径的logs
property.filePath=logs
property.filePattern=logs/%d{yyyy-MM-dd}
# 输出格式
property.layoutPattern=%highlight{%d{MM-dd HH:mm:ss.SSS} [%5p] [%40.40c{1.}:%3L] - %m%n}{FATAL=white, ERROR=red, WARN=blue, INFO=Green, DEBUG=Yellow, TRACE=blue}
# 记录器
appenders=Console,Debug,Info,Error
# 根记录器,所有记录器的父辈
rootLogger.level=debug
# 级别过滤(过滤日志记录)
# filters = threshold
filter.threshold.type=ThresholdFilter
# 只记录debug级别以上的日志,大小写无关:(ALL<)TRACE<DEBUG<INFO<WARN<ERROR<FATAL(<OFF)
filter.threshold.level=debug
# console
appender.Console.type=Console
appender.Console.name=Stdout
appender.Console.layout.type=PatternLayout
appender.Console.layout.pattern=${layoutPattern}
rootLogger.appenderRef.stdout.ref=Stdout
# debug rolling file
appender.Debug.type=RollingFile
appender.Debug.name=DebugRollingFile
appender.Debug.fileName=${filePath}/debug.log
appender.Debug.filePattern=${filePattern}/debug_%d{yyyy-MM-dd}_%i.log
appender.Debug.layout.type=PatternLayout
appender.Debug.layout.pattern=${layoutPattern}
appender.Debug.policies.type=Policies
appender.Debug.policies.time.type=TimeBasedTriggeringPolicy
appender.Debug.policies.time.interval=1
appender.Debug.policies.time.modulate=true
appender.Debug.policies.size.type=SizeBasedTriggeringPolicy
appender.Debug.policies.size.size=20M
appender.Debug.strategy.type=DefaultRolloverStrategy
appender.Debug.strategy.max=100
# 过滤debug以上信息
appender.Debug.filter.threshold.type=ThresholdFilter
appender.Debug.filter.threshold.level=INFO
appender.Debug.filter.threshold.onMatch=DENY
appender.Debug.filter.threshold.onMisMatch=NEUTRAL
# InfoRollingFile 日志级别
rootLogger.appenderRef.Debug.level=debug
rootLogger.appenderRef.Debug.ref=DebugRollingFile
# info rolling file
appender.Info.type=RollingFile
appender.Info.name=InfoRollingFile
appender.Info.fileName=${filePath}/info.log
appender.Info.filePattern=${filePattern}/info_%d{yyyy-MM-dd}_%i.log
appender.Info.layout.type=PatternLayout
appender.Info.layout.pattern=${layoutPattern}
appender.Info.policies.type=Policies
appender.Info.policies.time.type=TimeBasedTriggeringPolicy
appender.Info.policies.time.interval=1
appender.Info.policies.time.modulate=true
appender.Info.policies.size.type=SizeBasedTriggeringPolicy
appender.Info.policies.size.size=20M
appender.Info.strategy.type=DefaultRolloverStrategy
appender.Info.strategy.max=100
# 过滤 info 以上信息,只输出 info 级别日志
appender.Info.filter.threshold.type=ThresholdFilter
appender.Info.filter.threshold.level=warn
appender.Info.filter.threshold.onMatch=DENY
appender.Info.filter.threshold.onMisMatch=NEUTRAL
# InfoRollingFile 日志级别
rootLogger.appenderRef.Info.level=info
rootLogger.appenderRef.Info.ref=InfoRollingFile
# error rolling file
appender.Error.type=RollingFile
appender.Error.name=ErrorRollingFile
appender.Error.fileName=${filePath}/error.log
appender.Error.filePattern=${filePattern}/error_%d{yyyy-MM-dd}_%i.log
appender.Error.layout.type=PatternLayout
appender.Error.layout.pattern=${layoutPattern}
appender.Error.policies.type=Policies
appender.Error.policies.time.type=TimeBasedTriggeringPolicy
appender.Error.policies.time.interval=1
appender.Error.policies.time.modulate=true
appender.Error.policies.size.type=SizeBasedTriggeringPolicy
appender.Error.policies.size.size=20M
appender.Error.strategy.type=DefaultRolloverStrategy
appender.Error.strategy.max=100
# 过滤 error 以上信息,只输出 error 级别日志
appender.Error.filter.threshold.type=ThresholdFilter
appender.Error.filter.threshold.level=fatal
appender.Error.filter.threshold.onMatch=DENY
appender.Error.filter.threshold.onMisMatch=NEUTRAL
# ErrorRollingFile 日志级别
rootLogger.appenderRef.Error.level=error
rootLogger.appenderRef.Error.ref=ErrorRollingFile