文章作者:Tyan
博客: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 控制台输出

默认的日志配置会将信息输出到控制台。默认情况下会输出ERRORWARNINFO级别的信息。你也可以通过--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.filelogging.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到一个指定的目录。名字可以是一个绝对位置或相对于当前目录。

当日志文件达到10M时日志文件将循环,至于控制台输出,默认情况下只输出ERRORWARNINFO级别的信息。

日志系统在应用程序的生命周期早期进行初始化,同样地,通过@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 定制日志配置

在类路径中通过包含恰当的库可以激活各种日志系统,在类路径的根目录中提供一个合适的配置文件可以对日志系统进行更进一步的定制,或者将配置文件放在Spring Environmentlogging.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,则会尝试所有的不严格的变种(myPropertyNameMY_PROPERTY_NAME等)。

Spring Boot 2.0.0参考手册_中文版_Part IV_26相关推荐

  1. Spring Boot 2.0.0参考手册_中文版_Part I

    文章作者:Tyan 博客:noahsnail.com 第一部分:Spring Boot文档 1. 关于文档 Sring参考文档可以通过html,pdf和epub 三种形式得到.最新的文档可以从docs ...

  2. Spring Boot 2.0.0参考手册_中文版

    Spring Boot参考文档 第一部分:Spring Boot文档 1. 关于文档 Sring参考文档可以通过html,pdf和epub 三种形式得到.最新的文档可以从docs.spring.io/ ...

  3. Spring Security 5.0.x 参考手册 【翻译自官方GIT-2018.06.12】

    源码请移步至: https://github.com/aquariuspj/spring-security/tree/translator/docs/manual/src/docs/asciidoc ...

  4. springboot2稳定版本_重要版本Spring Boot 2.3.0发布 - spring.io

    重要版本Spring Boot 2.3.0于2020年5月15日发布,此版本增加了大量新功能和改进.有关完整的升级说明以及新的和值得注意的功能,请参阅发行说明. 2.3的新功能 依赖升级 Spring ...

  5. Spring Boot 2.3.0 发布:支持Java14、打包Docker镜像、优雅关机配置...

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者 | 冷冷gg 来源 | https://www.oschin ...

  6. Spring Boot Admin 2.0开箱体验

    2019独角兽企业重金招聘Python工程师标准>>> 概述 在我之前的 <Spring Boot应用监控实战> 一文中,讲述了如何利用 Spring Boot Admi ...

  7. Spring Boot 2.5.0 重新设计的spring.sql.init 配置有啥用?

    点击关注,赶紧上车 前几天Spring Boot 2.5.0发布了,其中提到了关于Datasource初始化机制的调整,有读者私信想了解这方面做了什么调整.那么今天就要详细说说这个重新设计的配置内容, ...

  8. 重磅!Spring Boot 2.5.0火热发布,还学得动吗?

    今年520的事情是真的多,把Spring Boot 2.5.0的版本发布都给忽略了! 今天跟我一起看看Spring Boot 2.5.0又都带来了哪些振奋人心的新特性吧! 主要更新 支持 Java 1 ...

  9. Spring Boot 2.3.0 发布

    Spring Boot 2.3.0 已经发布,此版本主要更新内容包括: 依赖升级 新版本核心组件依赖升级 Spring Data Neumann Spring HATEOAS 1.1 Spring I ...

最新文章

  1. ucl计算机硕士选课,伦敦大学学院UCL这4个超酷的机器学习专业
  2. 2019河北高职计算机专科学校录取分数线,2019河北高考专科院校录取分数线_专科各院校投档线_一品高考网...
  3. 0330 第九次课:软件包安装及卸载
  4. 简单的节流函数throttle
  5. 前端学习(632):转义字符
  6. Iptables详解+实例
  7. Redis简单命令(部分示例代码)
  8. c语言程序设计授课进度安排表,C语言程序设计教学大纲、教学计划进度简表
  9. Tomcat服务器时间不正确
  10. git tag — 标签相关操作
  11. paip.提升用户体验----解决浏览器关闭后自动退出的问题
  12. 遭遇爆炸式匿名*** 瑞星称有人下黑手
  13. 计算机耗材管理系统,办公用品(消耗品)管理系统 单机版
  14. 科研人必备英语改写神器——PARAPHRASER多语言改写
  15. android HID添加(三) ---applist key
  16. 利用MATLAB实现空间两点距离的计算以及优化
  17. 实现QQ表情功能(1)
  18. 视图的优点与缺点总结
  19. 机器学习——LR(线性回归)、LRC(线性回归分类)与人脸识别
  20. 语音识别java版demo

热门文章

  1. 小微企业的一账通解决方案(企业账号集成一体化)
  2. matlab仿真转表格,simulink导出excel表格数据-求高手!谁知道怎样把simulink仿真后结果数据导到e......
  3. 私钥创建,申请证书,吊销证书,创建自签名证书
  4. 【Gensim + TSNE使用】word2vec词向量处理中文小说 (词嵌入、高维数据降维)
  5. 图解禁用WannaCry病毒利用的445端口
  6. nn.Sequential
  7. java控制台检测不到远程端口,java – 远程调试:在端口8787上没有连接到OpenJDK 11上的Wildfly 14...
  8. python安装失败0x80070570_win10系统提示windows无法安装所需的文件及错误代码0X80070570的解决方法...
  9. Python输入除数被除数,求商以及典型案例-猜拳游戏的两个程序代码
  10. 小幺鸡添加mock功能