文章目录
- 日志格式
- 控制台输出
- 彩色编码输出
- 文件输出
- 文件级别
- 自定义日志配置
- Logback 扩展
- profile 指定 配置文件
- Environment 属性
springBoot 日志使用Commons Logging
作为抽象层,并将具体实现开放,支持Java Util Logging
、Log4j2
和Logback
。loggers 默认配置为使用console 输出,也可以选择文件输出。
如果你使用 Starters,那日志系统默认使用Logback 。
Tip
Java 提供了很多日志框架。不要担心上面的这些令人困扰。总的来说,如果你不需要改变你的日志依赖,springBoot默认的日志配置就很合适。
日志格式
springBoot 默认的日志输出类似如下:
2014-03-05 10:57:51.112 INFO 45469 --- [ main] org.apache.catalina.core.StandardEngine :
Starting Servlet Engine: Apache Tomcat/7.0.52
2014-03-05 10:57:51.253 INFO 45469 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/] :
Initializing Spring embedded WebApplicationContext
2014-03-05 10:57:51.253 INFO 45469 --- [ost-startStop-1] o.s.web.context.ContextLoader :
Root WebApplicationContext: initialization completed in 1358 ms
2014-03-05 10:57:51.698 INFO 45469 --- [ost-startStop-1] o.s.b.c.e.ServletRegistrationBean :
Mapping servlet: 'dispatcherServlet' to [/]
2014-03-05 10:57:51.702 INFO 45469 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean :
Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
输出中包含下面这些项:
- 日期和时间:精确到毫秒级,易于分类
- 日志级别:ERROR、WARN、INFO、DEBUG 或 TRACE
- 进程ID
- —:分割线,分割线之后是实际的日志消息
- 线程名:中括号[] 包着
- Logger 名:通常是源类名
- 日志消息
Note
Logback 没有FATAL
级别,对应着ERROR
控制台输出
默认的日志配置是将消息输出到控制台。
默认配置下,只有ERROR WARN INFO
级别的消息会被日志系统记录。你在运行你的应用时加个 --debug
标志打开 debug 消息。
$ java -jar myapp.jar --debug
你也可以在配置文件中指定debug=true。
debug 模式打开后,一些核心的logger(内置的container、Hibernate、SpringBoot)会输出更多信息。
同样地,你也可以打开 trace 模式,方法同上!
彩色编码输出
如果你的终端支持 ANSI
,彩色的输出会提供可读性。可以设置 spring.output.ansi.enabled
来改变默认的自动检测(detect)。
ALWAYS
开启彩色输出
DETECT
尝试检测ANSI 颜色是否支持
NEVER
关闭彩色输出
色彩编码用%clr转换词来配置。最简单的情势是根据日志级别进行色彩输出,例如:
%clr(%5p)
日志级别与色彩的映照以下:
Level | Color |
---|---|
FATAL | red |
ERROR | red |
WARN | yellow |
INFO | green |
DEBUG | green |
TRACE | green |
或,你可以通过在转换器中提供选项来指定应当试用的色彩或风格。例如,为了使文本显示黄色:
%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){yellow}
支持下面的色彩和风格:
blue
cyan
faint
green
magenta
red
yellow
文件输出
如果你想要写日志文件,你需要设置属性:logging.file
或 logging.path
。
两个属性的组合使用,情况如下:
logging.file | logging.file | 举例 | 说明 |
---|---|---|---|
none | none | 只在控制台输出 | |
指定文件 | none | my.log | 写到相对目录下的指定文件 |
none | 指定目录 | /var/log | 指定绝对路径下的spring.log |
当日志文件到达10Mb时会循环保存。文件的大小限制可通过logging.file.max-size
属性设置。之前保存的日志文件会无限期存档,除非配置logging.file.max-history
属性。
Note
日志系统在应用程序生命周期的早期被初始化。因此,日志的属性在通过@PropertySource加载的属性文件中找不到。Tip
日志属性独立于真实的日志基础架构以外。因此,Spring Boot不管理特定的配置主键(例如Logback的logback.configurationFile)。
文件级别
Spring支持的所有日志系统都可以在Spring的Environment中设置日志级别(例如在application.properties设置),使用logging.level.=进行设置,LEVEL是TRACE,DEBUG,INFO,WARN,ERROR,FATAL,OFF中的1个。root日志器可以用logging.level.root来配置。例如在application.properties中:
logging.level.root=WARN
logging.level.org.springframework.web=DEBUG
logginglevelorghibernate=ERROR
自定义日志配置
springBoot的自动配置会检测类路径的类库来自动激活相应的日志系统,在类路径的根目录中提供一个适合的配置文件可以对日志系统进行更进一步的定制,配置文件的路径也可以通过属性:logging.config
来指定。
你可以使用org.springframework.boot.logging.LoggingSystem
属性来强制Spring boot使用一个特殊的日志系统。这个值应该是日志系统具体实现的全限定类名。你也可以将这个值设置为none,表示完全关闭日志配置。
取决于你的日志系统,会加载以下文件:
Logging System | Customization |
---|---|
Logback | logback-spring.xml, logbackspring.groovy, logback.xml, or logback.groovy |
Log4j2 | log4j2-spring.xml or log4j2.xml |
Java.util.logging | logging.properties |
下表介绍了一些属性(从Spring Environment中转移到 系统属性):
Spring Environment | 系统属性 | 说明 |
---|---|---|
logging.exception-conversion-word | LOG_EXCEPTION_CONVERSION | |
logging-file | LOG_FILE | 日志文件名 |
logging.file.max-size | LOG_FILE_MAX_SIZE | 日志文件的最大容量 |
logging.file.max-history | LOG_FILE_MAX_HISTORY | 日志文件的最长保存时间 |
logging.path | LOG_PATH | 日志文件保存路径 |
logging.pattern.console | CONSOLE_LOG_PATTERN | 使用控制台输出的日志模式 |
logging.pattern.dateformat | LOG_DATEFORMAT_PATTERN | 日志时间格式 |
logging.pattern.file | FILE_LOG_PATTERN | 日志文件中日志的模式 |
logging.pattern.level | LOG_LEVEL_PATTERN | 在渲染日志级别时的格式 |
PID | PID | 当前的进程ID |
当转换配置文件时,所有的日志系统都支持查询系统属性。可以看看spring-boot.jar中的配置样例:
+ Logback
+ Log4j2
+ Java.util.logging
Logback 扩展
Spring Boot包含了许多可以帮助进行高级配置的Logback扩展。你可以在你的 logback-spring.xml配置文件中使用这些扩展。
Note
由于标准的logback.xml配置文件加载的太早,所以你不能在里面使用扩展部分。你需要使用logback-spring.xml或者通过logging.config自定义
profile 指定 配置文件
标签让你基于激活的springProfile来include配置。
<springProfile name="staging">
<!-- configuration to be enabled when the "staging" profile is active -->
</springProfile>
<springProfile name="dev, staging">
<!-- configuration to be enabled when the "dev" or "staging" profiles are active -->
</springProfile>
<springProfile name="!production">
<!-- configuration to be enabled when the "production" profile is not active -->
</springProfile>
Environment 属性
标签让你将spring environment中的属性暴露给Logback使用。如果你想在你的Logback配置中访问application.properties文件中的属性,这是非常有用的。这个标签与Logback的标准标签的作用方式类似,但不是为你指定的source属性(从Environment中)指定1个直接的value。如果你需要在某个地方而不是在local作用域中存储属性,你可使用scope属性。如果你需要一个备用值以防属性没有在Environment中设置,你可使用defaultValue属性。
<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>