Logging

Spring Boot使用Commons Logging记录所有内部日志,但是底层日志实现处于open状态.为Java Util Logging,Log4j2Logback提供了默认实现.每种实现,记录器都默认配置为使用控制台输出,还提供了可选的文件输出.

默认情况下,如果使用"starters",logback将用于日志记录. 还包括适当的Logback路由,以确保使用Java Util Logging,Commons Logging,Log4J或SLF4J的依赖库都将正常工作。

有很多日志框架可用于Java。 不要担心,如果上面的列表看起来很混乱。 一般来说,你不需要改变你的日志依赖,Spring Boot默认值将正常工作。

26.1 日志格式

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 Level: ERROR,WARN,INFO,DEBUG或者TRACE
  • Process ID
  • 一个---分隔符来区分实际日志消息的开始。
  • Thread name : 用方括号括起来(可能被截断用于控制台输出)。
  • Logger name: 这通常是源类名(通常是缩写)。
  • 日志消息。

Logback没有FATAL级别(它映射到ERROR)

26.2 控制台输出

默认日志配置会在写入消息时将消息回显到控制台。 默认情况下,将记录ERROR,WARN和INFO级别消息。 您还可以通过使用--debug标志启动应用程序来启用“调试”模式。

    $ java -jar myapp.jar --debug

不还可以在application.properties中指定debug = true。

当调试模式启用时,会选择配置输出更多信息的(嵌入式容器,Hibernate和Spring Boot)核心记录器。启用调试模式不会将应用程序配置为使用DEBUG级别记录所有消息。

你可以通过--trace标志(或在application.properties中添加trace=true)启动应用的"trace"模式.这将启用一些核心记录器的trace日志记录

26.2.1 验收编码输出

如果您的终端支持ANSI,将使用颜色输出来帮助可读性。 您可以将spring.output.ansi.enabled设置为支持的值,以覆盖自动检测。 使用%clr转换字组态颜色编码。 在其最简单的形式中,转换器将根据日志级别对输出进行着色,例如:

    %clr(%5p)

日志级别到颜色的映射如下:

Level 颜色
FATAL 红色
ERROR 红色
WARN 黄色
INFO 绿色
DEBUG 绿色
TRACE 绿色

可以通过将其作为转换的选项来指定应使用的颜色或样式。 例如,使文本变为黄色:

    %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.*属性:

logging.file loging.path 例子 描述
(none) (none) 仅zai在控制台记录日志
特定文件 (none) my.log 写入指定的日志文件。 名称可以是绝对路径或相对路径。
(none) 特定目录 /var/log 将spring.log写入指定的目录。 名称可以是绝对路径或相对路径。

当日志文件内容达到10M时会覆盖,并且默认输出ERRPR.WARN,INFO级别的日志到控制台。

日志系统在应用程序生命周期的早期初始化,因此在通过@PropertySource注解加载的properties文件中将找不到日志属性。 日志记录属性与实际日志记录基础结构无关。 因此,特定配置key(例如Logback的logback.configurationFile)不受spring Boot管理。

26.4

所有支持的日志记录系统都可以使用"logging.level.*=LVEL"在Spring环境中设置记录器(logger)(例如在application.properties中设置),'LEVEL'是TRACE,DEBUG,INFO,ERROR,WARN,OFF,FATAL的其中之一.根记录器可以使用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 自定义日志配置

可以通过在classpath中添加适当的库来激活各种日志系统,并通过在classpath的根目录或者Spring Environment的logging.config属性指定的位置提供合适的配置文件来进一步定制.

可以通过使用org.springframework.boot.logging.LoggingSystem系统属性来强制Spring Boot使用日志系统.该值应为LoggingSystem实现的全限定类名.还可以通过使用None值来完全禁用Spring Boot的日志记录配置。

因为在创建ApplicationContext之前初始化日志记录,所以不可能从在Spring @Configuration文件中@PropertySource控制日志记录.

根据您的日志记录系统,将加载以下文件: | 日志系统 | 定制 | |--------|--------| | 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 Util日志记录中存在已知的类加载问题,当从“executable jar”运行时会导致问题。 我们建议您尽可能避免。

为了更好的定制,一些其他属性从Spring环境转移到系统属性:

Spring环境 系统属性 注释
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,则默认日志格式将包含“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拓展

Spring Boot包含多个Logback的扩展,可以帮助进行高级配置。 您可以在logback-spring.xml配置文件中使用这些扩展。

您不能在标准logback.xml配置文件中使用扩展,因为加载得太早。 您需要使用logback-spring.xml或定义logging.config属性。

26.6.1 Profile-specific配置

这个标签允许你根据活动的Spring profiles文件可选的包含或者排除部分配置。在元素中的任何位置都支持profile配置.使用name属性指定哪个配置文件接收profile配置.可以使用逗号分割列表指定多个profile配置。

    <springProfile name="staging">
        <!-- 当"staging"profile处于激活状态时启用该配置 -->
    </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 环境属性

标签允你从Spring环境中表达属性,以在logback中使用.如果你想在logback的配置中访问application.properties文件中的value值,这将很有用。该标签的工作方式与logback标准的《property>标签类似.但是不是直接指定值,而是指定属性的源(从环境变量),如果需要将属性存储在本地作用域以外的其他位置,则可以使用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>

RelaxedPropertyResolver用于访问Environment属性。 如果以虚线符号(my-property-name)指定源,将尝试所有放宽的变体(myPropertyName,MY_PROPERTY_NAME等)。

Copyright © www.gitbook.com/@herryZ 2016 all right reserved,powered by Gitbook该文件修订时间: 2017-01-06 08:13:12

results matching ""

    No results matching ""