springBoot Logging 日志详解

x33g5p2x  于2022-02-07 转载在 Spring  
字(4.6k)|赞(0)|评价(0)|浏览(306)

springBoot 日志使用Commons Logging作为抽象层,并将具体实现开放,支持Java Util LoggingLog4j2Logback。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)

日志级别与色彩的映照以下:

LevelColor
FATALred
ERRORred
WARNyellow
INFOgreen
DEBUGgreen
TRACEgreen

或,你可以通过在转换器中提供选项来指定应当试用的色彩或风格。例如,为了使文本显示黄色:

%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){yellow}

支持下面的色彩和风格:

blue
cyan
faint
green
magenta
red
yellow

文件输出

如果你想要写日志文件,你需要设置属性:logging.filelogging.path

两个属性的组合使用,情况如下:

logging.filelogging.file举例说明
nonenone只在控制台输出
指定文件nonemy.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 SystemCustomization
Logbacklogback-spring.xml, logbackspring.groovy, logback.xml, or logback.groovy
Log4j2log4j2-spring.xml or log4j2.xml
Java.util.logginglogging.properties

下表介绍了一些属性(从Spring Environment中转移到 系统属性):

Spring Environment系统属性说明
logging.exception-conversion-wordLOG_EXCEPTION_CONVERSION
logging-fileLOG_FILE日志文件名
logging.file.max-sizeLOG_FILE_MAX_SIZE日志文件的最大容量
logging.file.max-historyLOG_FILE_MAX_HISTORY日志文件的最长保存时间
logging.pathLOG_PATH日志文件保存路径
logging.pattern.consoleCONSOLE_LOG_PATTERN使用控制台输出的日志模式
logging.pattern.dateformatLOG_DATEFORMAT_PATTERN日志时间格式
logging.pattern.fileFILE_LOG_PATTERN日志文件中日志的模式
logging.pattern.levelLOG_LEVEL_PATTERN在渲染日志级别时的格式
PIDPID当前的进程ID

当转换配置文件时,所有的日志系统都支持查询系统属性。可以看看spring-boot.jar中的配置样例:

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>

相关文章