SpringBoot文档翻译系列——26.日志logging
原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/7613854.html
这是SpringBoot的日志内容
26 日志
Spring使用CommonLogging作为内置日志记录工具,但也保留了底层日志的实现。默认的配置提供了Java Util Logging、Log4J2和LogBack。在不同情况下,可以通过预先的配置来选择控制台输出或者文件输出。
默认情况下,如果你使用了SpringBoot的"Starters",将会使用LogBack作为日志工具。其拥有适当的回退路由,以确保Java Util Logging、Log4J2和Commons Logging的依赖库可以正常工作。
注意:Java拥有许多的日志框架。如果上面的日志工具使你迷惑不堪,请不要担心。一般情况下,并不需要你更改日志依赖,SpringBoot也会工作的很好。
26.1 日志格式
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
- ---——用于区分真正日志信息的分隔符
- 线程名称——使用方括号括住(控制台输出时可能会被截断)
- 日志名称——资源类名(通常是简化的)
- 日志信息
注意:LogBack工具并没有FATAL级别(这个级别会被映射到ERROR)
26.2 控制台输出
采用默认的日志配置日志信息将会被输出到控制台。默认情况下ERROR、WARN和INFO级别的信息将会被记录显示。你也可以通过启动应用时添加--debug标签来开启debug模式。
$ java -jar muapp.jar --debug
注意:你也可以在application.properties配置文件中添加debug=true来达到同样的目的。
当使用debug模式时,核心记录器(包括内嵌容器、Hibernate和SpringBoot)被配置用来输出更多信息。debug模式下并不会配置你的应用来记录DEBUG级别的所有信息。
或者,你也可以通过类似的两种方法开启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}
下面是SpringBoot支持的颜色或者样式:
- blue
- cyan
- faint
- green
- magenta
- red
- yellow
26.3 文件输出
默认情况下,SpringBoot只会将日志输出到控制台,而不会输出到文件中。如果你想将日志不只输出到控制台,还是输出到文件中,你需要在application.properties文件中进行logging.file或者logging.path属性设置。
下表中显示了logging.*属性如何一起来使用:
| logging.file | logging.path | Example | Description |
| (none) | (none) | 仅输出到控制台 | |
| 指定文件 | (none) | my.log | 输出到指定文件,名称可以是准确的位置,也可以是相对于当前目录的 |
| (none) | 指定目录 | /var/log | 将spring.log输出到指定目录,名称可以是准确的位置,也可以是相对于当前目录的 |
表26.1 日志属性
默认情况下,日志文件会记录控制台输出、ERROR、WARN和INFO级别的日志信息,并且在达到10M的时候重新创建文件来记录。
注意:SpringBoot的日志系统在应用程序生命周期的早期就完成初始化,因此通过@PropertiesSource注解加载的配置文件中的属性将不会起到应有的作用(不生效)。
注意:日志的属性与实际的日志基础结构无关。因此,指定的配置内容(就像LogBack的logback.configurationFile属性)并没有被SpringBoot所管理。
26.4 日志级别
所有支持的日志系统都拥有在Spring Environment(环境就如SpringBoot中的application.properties)中使用logging.level.*=LEVEL的方式进行日志级别的配置,其中LEVEL可以是TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF之一。根日志可以使用属性logging.level.root进行配置,例如:(在application.properties中)
logging.level.root=WARN
logging.level.org.springframework.web=DEBUG
logging.level.org.hibernate=ERROR
注意:默认情况下,SpringBoot会重定义Thymeleaf模板INFO信息,以使其可被DEBUG级别的日志所记录。这有助于减少标准日志输出中的乱象。有关如何在你的配置中重定义请参照LevelRemappingAppender。
26.5 自定义日志配置
各类日志系统可被类路径下的适当的库所激活,然后被类根路径下的或者Spring环境中的logging.config属性所指定的路径下的适合的配置文件所自定义。
你可以通过org.springframework.boot.logging.LoggingSystem系统属性来强制SpringBoot使用某一指定的日志系统。其值为实现LoggingSystem的完全限定名。你也可以为其设置为none来似的日志功能完全失效。
注意:因为日志系统在ApplicationContext初始化之前就完成了初始化。所以无法通过@Configuration中的@PropertiesSources来控制日志系统。系统属性和SpringBoot的基本配置文件效用完好。
基于你的日志系统,以下文件将会被加载:
| Logging System | Customization(自定义) |
| LogBack | logback-spring.xml;ogback-spring.groovy;logback.xml;logback.groovy |
| Log4j2 | log4j2-spring.xml;log4j2.xml |
| JDK (Java Util Logging) | logging.properties |
注意:如果可能,我们建议您使用- spring变量来配置日志配置(例如logBack-spring.xml而不是logBack.xml)如果你使用的以往的配置路径,Spring将不能完整的控制日志的初始化。
注意:Java Util日志中有一些已知的类加载问题,这些问题在从“可执行jar”中运行时引起问题。我们建议你尽可能避免使用它。
为了帮助定制,一些其他属性从Spring环境转移到系统属性:
| 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 | 用于控制台日志输出的日志格式(仅支持默认的LogBack配置) |
| logging.pattern.file | FILE_LOG_PATTERN | 用于文件输出日志的日志格式(仅支持默认的额LogBack配置) |
| logging.pattern.level | LOG_LEVEL_PATTERN | 用于渲染日志级别的样式(默认为%5p)(仅支持默认的额LogBack配置) |
| PID | PID | 当前进程ID(在可能的情况下发现并没有定义为系统环境变量) |
所有支持的日志系统都可以在解析其配置文件时查阅系统属性。例如spring-boot.jar中的默认配置。
如果你想在一个日志属性中使用占位符,你需要使用SpringBoot的语法,而不是底层框架的语法。另外如果你在使用LogBack,你需要使用:来分隔一个属性和其默认值,而不是:-。
通过覆盖LOG_LEVEL_PATTERN属性(或者LogBack中的logging.pattern.level属性),你可以在日志行中添加MDC(Mapped Diagnostic Context映射调试上下文:是 log4j 和 logback 提供的一种方便在多线程条件下记录日志的功能)和ad-hoc(点对点)内容。例如:如果你使用logging.pattern.level=user:%X{user} %5p配置,则默认的日志输出格式将会包含一个名为user的MDC条目(当然需要存在才能显示)例如:
2015-09-30 12:30:04.031 user:juergen INFO 22174 --- [ nio-8080-exec-0] demo.Controller Handling authenticated request
26.6 LogBack扩展
SpringBoot为LogBack提供了许多扩展属性用于高级配置。你可以在你的logback-spring.xml配置文件中使用这些属性。
注意:由于logback.xml文件加载的过于早(早于SpringBoot应用的启动),所以你不能在其中使用这些扩展属性,你需要使用logBack-spring.xml文件或者logging.config属性。
注意:这些扩展属性无法与LogBack的配置扫描器一起使用(无法被扫描到),如果你尝试这样做,你会得到类似于下面的这样的错误记录:
ERROR in ch.qos.logback.core.joran.spi.Interpreter@4:71 - no applicable action for [springProperty], current ElementPath is [[configuration][springProperty]]
ERROR in ch.qos.logback.core.joran.spi.Interpreter@4:71 - no applicable action for [springProfile], current ElementPath is [[configuration][springProfile]
26.6.1 定制化的配置
<springProfile>标签可用于在Spring配置文件中依据条件执行或者排除执行某些配置,其可用于<congfiguration>元素内的任何位置。使用name属性来指定那个配置切面可被执行。多个Profile可以使用以逗号分割的方式来指定。
<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 环境属性
<springProperty>标签可以允许你从Spring环境中提取属性来用于LogBack。这在你从application.properties中获取关于LogBack配置的属性的值时很有效。这个标签和LogBack的<properties>标签类似的方式工作,并不是直接制定一个值,而是指定属性的来源(source属性)。你可以使用scope属性来保存属性,否则只会把存在本地。如果你想要指定一个可靠的值,以防其未被配置,你可以使用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>
注意:source属性的值必须采用串的形式(例如:my.property.name)。然而可以使用轻松的规则将属性添加到环境中。
SpringBoot文档翻译系列——26.日志logging的更多相关文章
- SpringBoot基础系列-使用日志
原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9996897.html SpringBoot基础系列-使用日志 概述 SpringBoot ...
- SpringBoot文档翻译系列——29.SQL数据源
原创作品,可以转载,但是请标注出处地址: 因为需要使用到这方面内容,所有对这一部分进行了翻译. 29 使用SQL数据源 SpringBoot为SQL数据源提供了广泛支持,从直接使用JdbcTempl ...
- SpringBoot系列——Logback日志,输出到文件以及实时输出到web页面
前言 SpringBoot对所有内部日志使用通用日志记录,但保留底层日志实现.为Java Util Logging.Log4J2和Logback提供了默认配置.在不同的情况下,日志记录器都预先配置为使 ...
- SpringBoot系列之日志框架使用教程
目录 1.SpringBoot日志级别 1).日志级别简介 2).默认日志级别 3).配置日志级别 4).日志分组设置 2.SpringBoot日志格式设置 1).默认格式原理简介 2).默认日志格式 ...
- SpringBoot系列之日志框架介绍及其原理简介
SpringBoot系列之日志框架介绍及其原理简介 1.常用日志框架简介 市面上常用日志框架:JUL.JCL.jboss-logging.logback.log4j.log4j2.slf4j.etc. ...
- SpringBoot入门系列(十二)统一日志收集
前面介绍了Spring Boot 异常处理,不清楚的朋友可以看看之前的文章:https://www.cnblogs.com/zhangweizhong/category/1657780.html. 今 ...
- SpringBoot起飞系列-日志使用(四)
一.SpringBoot中的日志组件 日志是一个系统中不可缺少的组件.在项目中,我们常用的日志组件有JUL.JCL.Jboss-logging.logback.log4j.log4j2.slf4j.. ...
- 黄聪:Microsoft Enterprise Library 5.0 系列教程(四) Logging Application Block
原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(四) Logging Application Block 企业库日志应用程序模块工作原理图: 从上图我们可以 ...
- python 的日志logging模块
1.简单的将日志打印到屏幕 import logging logging.debug('This is debug message')logging.info('This is info messag ...
随机推荐
- [2014-02-23]Asp.net Mvc分布式Session存储方案
要玩集群的时候,怎么处理会话状态Session? InProc模式的sessionState是不能用了,因为这是在web服务器本机进程里的,会造成各节点数据不一致.除非在分流的时候用ip hash策略 ...
- hibernate 基本配置文件及CRDU的操作和基本的HQL查询
以下所有内容保存在 E:\JavaWebSrc\firstHibernate 目录中,项目名称为firstHibernate,使用IDEA打开,项目所需jar包在 F:\常用综合\常用jar包\hi ...
- 零基础如何一步一步开始搭建高性能直播平台?现以GitChat·架构来进行说明
前言 现在直播已经成为移动互联网时代一个新的重要流量入口,从YY.斗鱼到花椒直播,直播已经成为人们分享交流的新方式,应用场景众多,主要分为: 金融类直播:金融直播可应用于实时解盘,在线专家讲座,专家在 ...
- Ubuntu 14.04 安装LNMP(nginx/1.12.1+php7.1.9+mysql5.7.19)环境
这篇教程中,我们将讨论怎样在Ubuntu 14.04搭建LNMP环境 1 安装Nginx 首先我们要更新apt源 sudo add-apt-repository ppa:nginx/stable s ...
- ionic3 自动创建启动背景splash以及图标icon
在新建的项目文件夹下的 resources下就是我们放置图标以及启动背景图片的位置了. 如果现在我们想生成自己的图片的启动背景以及图片,我们需要把resources下的 icon.png 以及spla ...
- AJAX 处理xml 数据
//这个方式返回的得是 xml标准的对象,可以返回 xml字符串,前端js 使用转为xml function createXml(str){ if(document.all){//IE浏览器 va ...
- 团队作业4——第一次项目冲刺(Alpha版本)2st day
一.Daily Scrum Meeting照片 二.燃尽图 三.项目进展 界面 1.四个用户登录界面已经完成. 2.界面内的功能完成了一小部分. 登陆部分 1.QQ授权已经申请,还未通过. 2.通过好 ...
- 201521123078《Java程序设计》第1周学习总结
1. 本周学习总结 简单的了解JVM,JRE,JDK,编写简单的Java程序 2. 书面作业 为什么java程序可以跨平台运行?执行java程序的步骤是什么?(请用自己的语言书写) 通过JVM虚拟机, ...
- vbs文件共享变量与函数的方法
参考资料: vbs能否像其他编程语言一样,把写好的代码打包成类库以供调用呢?经过搜索和实验,发现vbs文件之间可以互相调用并共享变量,这样我们就不用再反复地编写轮子了. 以下是一个调用实例: ==== ...
- Linux SDK之uClinux、Broadcom、Atheros、Realtek、Ralink、Marvell、Intel
接触的Linux SDK越来越多,整理整理,分享分享,不求系统全面,对您有帮助便足矣 文中大部分是与AP/Router SoC解决方案(单芯片WIFI 路由器解决方案)相关的Linux SDK SDK ...