Spring Boot 2.0.0参考手册_中文版_Part IV_26
2017-01-09 21:05
267 查看
文章作者:Tyan
博客:noahsnail.com | CSDN | 简书
默认情况下,如果使用
在Java中有许多日志框架可用。不必担心上面的列表看起来有点混乱。通常情况下你不需要改变你的日志依赖,Spring Boot默认情况下能很好的工作。
下面的是输出项:
Date and Time — 精确到毫秒且容易排序。
Log级别 — ERROR,WARN,INFO,DEBUG或TRACE。
进程ID。
线程名称 — 用方括号包裹(在控制台输出中经常是缩减的)。
Logger名称 — 源类名(经常是简写)。
日志信息。
Logback没有FATAL级别(它映射到ERROR)。
你也可以在
当启用调试模式时,配置选择的核心logger(嵌入式容器,Hibernate和Spring Boot)来输出更多的信息。启动调试模式不会将你的应用配置成输出所有
或者,你可以用
颜色编码用
日志级别与颜色的映射如下:
或者,你可以通过在转换器中提供选项来指定应该试用的颜色或风格。例如,为了使文本显示黄色:
支持下面的颜色和风格:
blue
cyan
faint
green
magenta
red
yellow
下表显示了
表 26.1. Logging属性
当日志文件达到10M时日志文件将循环,至于控制台输出,默认情况下只输出
日志系统在应用程序的生命周期早期进行初始化,同样地,通过
日志属性独立于真正的日志基础架构之外。因此,Spring Boot不管理特定的配置主键(例如Logback的
默认情况下Spring Boot重新映射Thymeleaf的
你可以使用系统属性
由于日志是在
根据你的日志系统,将会加载下面的文件:
我们建议你尽可能的使用
在Java Java Util Logging中存在类加载问题,当从
为了帮助定制一些其它属性,从Spring
当转换配置文件时,所有的日志系统都支持查询系统属性。例如
如果你在日志属性中想使用占位符,你应该试用Spring Boot的语法而不是底层框架的语法。尤其是,如果你在使用Logback,你应该使用
你可以通过重写
你不能在标准的
博客:noahsnail.com | CSDN | 简书
26. Logging
Spring Boot所有的内部日志都采用Commons Logging,但开放了底层的日志实现。提供了对Java Util Logging,Log4J2和Logback的默认实现。在每个logger中都预先配置使用控制台作为输出,同时也可用可选的文件输出。默认情况下,如果使用
Starters,Logback将作为日志。也要包含恰当的Logback规则来保证依赖库使用Java Util Logging,Commons Logging,Log4J或SLF4J都能正确工作。
在Java中有许多日志框架可用。不必担心上面的列表看起来有点混乱。通常情况下你不需要改变你的日志依赖,Spring Boot默认情况下能很好的工作。
26.1 Log格式
Spring Boot默认的日志输出看起来如下: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: [/*]
下面的是输出项:
Date and Time — 精确到毫秒且容易排序。
Log级别 — ERROR,WARN,INFO,DEBUG或TRACE。
进程ID。
---分隔符来区分真正的日志信息的开始。
线程名称 — 用方括号包裹(在控制台输出中经常是缩减的)。
Logger名称 — 源类名(经常是简写)。
日志信息。
Logback没有FATAL级别(它映射到ERROR)。
26.2 控制台输出
默认的日志配置会将信息输出到控制台。默认情况下会输出ERROR,
WARN和
INFO级别的信息。你也可以通过
--debug来启动你的应用,从而启用“debug”模式。
$ java -jar myapp.jar --debug
你也可以在
application.properties指定
debug=true。
当启用调试模式时,配置选择的核心logger(嵌入式容器,Hibernate和Spring Boot)来输出更多的信息。启动调试模式不会将你的应用配置成输出所有
DEBUG级别的信息。
或者,你可以用
--trace标记(或在
application.properties中添加
trace=true)启动你的应用,从而启用“trace”模式。这将在选择的核心logger中(嵌入式容器,Hibernate模式生成和整个Spring文件夹)启用trace日志。
26.2.1 颜色编码输出
如果你的终端支持ANSI,颜色输出可以用来辅助阅读。你可以为spring.output.ansi.enabled设置一个支持值来覆盖自动检测。
颜色编码用
%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
26.3 文件输出
默认情况下,Spring Boot只能输出日志到控制台,不会写入日志文件。如果你想除了控制台之外还想写日志文件,你需要设置logging.file或
logging.path属性(例如,在你的
application.properties)。
下表显示了
logging.*属性怎样在一起使用:
表 26.1. Logging属性
logging.file | logging.path | Example | Description |
---|---|---|---|
(none | (none) | 只输出到控制台 | |
指定文件 | (none) | my.log | 写入指定的日志文件。名字可以是一个绝对位置或相对于当前目录。 |
(none) | Specific directory | /var/log | 写spring.log到一个指定的目录。名字可以是一个绝对位置或相对于当前目录。 |
ERROR,
WARN和
INFO级别的信息。
日志系统在应用程序的生命周期早期进行初始化,同样地,通过
@PropertySource注解加载的属性文件中将不会发现日志属性。
日志属性独立于真正的日志基础架构之外。因此,Spring Boot不管理特定的配置主键(例如Logback的
logback.configurationFile)。
26.4 日志级别
Spring支持的所有日志系统都可以在Spring的Environment中设置日志级别(例如在
application.properties设置),使用
logging.level.*=LEVEL进行设置,
LEVEL是TRACE,DEBUG,INFO,WARN,ERROR,FATAL,OFF中的一个。
root日志器可以用
logging.level.root来配置。例如在
application.properties中:
logging.level.root=WARN logging.level.org.springframework.web=DEBUG logging.level.org.hibernate=ERROR
默认情况下Spring Boot重新映射Thymeleaf的
INFO信息,为了它们能在
DEBUG级别进行输出。这能帮助减少标准日志输出中的噪声。关于怎样在你自己的配置中使用重新映射的更多细节请看
LevelRemappingAppender。
26.5 定制日志配置
在类路径中通过包含恰当的库可以激活各种日志系统,在类路径的根目录中提供一个合适的配置文件可以对日志系统进行更进一步的定制,或者将配置文件放在SpringEnvironment的
logging.config属性中指定的位置。
你可以使用系统属性
org.springframework.boot.logging.LoggingSystem来强制Spring Boot使用一个特定的日志系统。它的值应该是全限定类名的
LoggingSystem实现。你也可以通过使用值
none来完全禁用Spring Boot的日志配置。
由于日志是在
ApplicationContext创建之前初始化,因此不可能从Spring
@Configuration文件中的
@PropertySources来控制日志。系统属性和传统的Spring Boot外部配置文件可以工作的很好。
根据你的日志系统,将会加载下面的文件:
Logging System | Customization |
---|---|
Logback | logback-spring.xml, logback-spring.groovy, logback.xml or logback.groovy |
Log4j2 | log4j2-spring.xml or log4j2.xml |
JDK (Java Util Logging) | logging.properties |
-spring变种来进行日志配置(例如,
logback-spring.xml而不是
logback.xml)。如果你在使用标准的配置路径,Spring不能完全控制日志的初始化。
在Java Java Util Logging中存在类加载问题,当从
executable jar运行时会引起问题。我们建议你尽可能的避免它。
为了帮助定制一些其它属性,从Spring
Environment中转移到系统属性中:
Spring Environment | System Property | Comments |
---|---|---|
logging.exception-conversion-word | LOG_EXCEPTION_CONVERSION_WORD | 当日志出现异常时会用到这个转换词。 |
logging.file | LOG_FILE | 如果定义了,会在默认的日志配置中使用。 |
logging.path | LOG_PATH | 如果定义了,会在默认的日志配置中使用。 |
logging.pattern.console | CONSOLE_LOG_PATTERN | 用在控制台中的日志模式(stdout)。(只支持默认的Logback设置。) |
logging.pattern.file | FILE_LOG_PATTERN | 用在文件中的日志模式 (如果启用LOG_FILE)。(只支持默认的Logback设置。) |
logging.pattern.level | LOG_LEVEL_PATTERN | 这种模式用来实施日志级别(默认%5p)。 (只支持默认的Logback设置。) |
PID | PID | 当前的进程ID |
spring-boot.jar的默认配置。
如果你在日志属性中想使用占位符,你应该试用Spring Boot的语法而不是底层框架的语法。尤其是,如果你在使用Logback,你应该使用
:作为属性名和默认值之间的分隔符,而不是
:-。
你可以通过重写
LOG_LEVEL_PATTERN(或Logback中的
logging.pattern.level)来添加MDC和其它的专门内容来日志行中。例如,你可以使用
logging.pattern.level=user:%X{user} %5p,默认的日志形式将包含MDC输入,如果它存在的话,例如:
2015-09-30 12:30:04.031 user:juergen INFO 22174 --- [ nio-8080-exec-0] demo.Controller Handling authenticated request
26.6 Logback扩展
Spring Boot包含许多Logback的扩展,这有助于进行更高级的配置。你可以在你的logback-spring.xml配置文件中使用这些扩展。
你不能在标准的
logback.xml配置文件中使用扩展,因为它加载的太早了。你需要使用
logback-spring.xml或定义
logging.config属性。
26.6.1 特定profile的配置
<springProfile>标签允许你自由的包含或排除基于激活的Spring profiles的配置的一部分。在
<configuration>元素的任何地方都支持Profile部分。使用
name属性来指定哪一个profile接受配置。多个profiles可以用一个逗号分隔的列表来指定。
<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>
26.6.2 Environment属性
<springProperty>标签允许你在Logback使用从Spring
Environment获得的属性。如果你想在你的Logback配置中访问
application.properties文件中的属性,这是非常有用的。这个标签与Logback的标准
<property>标签的作用方式类似,但不是为你指定的
source属性(从
Environment中)指定一个直接的
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>
RelaxedPropertyResolver是用来访问
Environment属性。如果在破折号符号中指定了
source,则会尝试所有的不严格的变种(
myPropertyName,
MY_PROPERTY_NAME等)。
相关文章推荐
- Spring Boot 2.0.0参考手册_中英文对照_Part IV_26
- Spring Boot 2.0.0参考手册_中文版_Part IV_23
- Spring Boot 2.0.0参考手册_中文版_Part IV_25
- Spring Boot 2.0.0参考手册_中文版_Part III_19-22
- Spring Boot 2.0.0参考手册_中英文对照_Part IV_24
- Spring Boot 2.0.0参考手册_中英文对照_Part IV_25
- Spring Boot 2.0.0参考手册_中文版_Part II_8-10
- Spring Boot 2.0.0参考手册_中文版_Part II_11-12
- Spring Boot 2.0.0参考手册_中文版_Part I
- Spring Boot 2.0.0参考手册_中英文对照_Part IV_23
- Spring Boot 2.0.0参考手册_中英文对照_Part III_13
- Spring Boot 2.0.0参考手册_中英文对照_Part II_8-10
- Spring Boot 2.0.0参考手册_中文版_Part IV_24
- Spring Boot 2.0.0参考手册_中英文对照_Part II_11-12
- Spring Boot 2.0.0参考手册_中英文对照_Part III_14-18
- SpringBoot 中文手册 --Part IV --36 用JTA进行分布式事务
- SpringBoot 中文手册 --Part IV --27
- 使用Spring JMS - Spring Framework reference 2.0.5 参考手册中文版
- SpringBoot 中文手册 --Part IV --31 缓存
- Spring Boot 2.0.0参考手册_中文版_Part III_14-18