欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

spring boot 特性之 Logging

程序员文章站 2022-07-10 13:44:21
...

 

spring boot 特性之 Logging

 【日志格式】

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: [/*]

默认格式从左至右分别为: 

 

 * 日期和时间,精确到毫秒;

 * 日志级别,分为:ERROR,WARN,INFO,DEBUG 和 TRACE;

 * 进程ID;

 * --- 分隔符,其后为实际的日志信息;

 * 线程名称;

 * 日志名称:通常是简短的类名;

 * 日志内容信息

 

NOTE: Logback 没有 FATAL 级别的日志,它被当作 ERROR 级别。

 

【输出到控制台】

默认的日志信息输出在控制台。级别为 ERROR,WARN 和 INFO 的信息会被打印。在启动应用时 加上 --debug 参数可以启动 DEBUG 级别的日志:

 

$ java -jar myapp.jar --debug

 此外,也可以在 application.properties 文件中指定 debug=true 来启用 DEBUG 级别。

 

 

当启用 DEBUG 级别日志,一些核心的日志会输出更详细信息,如 Tomcat,Hibernate,SpringBoot 等,但并不会输出所有信息。

 

当启用 TRACE 级别日志时,输出的信息将会更加详细,除了 DEBUG 输出的内容外,还会输出整个 Spring 框架的信息。

 

(不同级别的信息输出配置不同颜色)

 

默认的日志级别配置的颜色如下所示:

 * FATAL     --- red

 * ERROR   --- red

 * WARN     --- yellow

 * INFO       --- green

 * DEBUG   --- green

 * TRACE    --- green

 

所有支持的颜色为:blue,cyan,faint,green,magenta,red,yellow

 

如果想要自定义颜色,需要设置 spring.output.ansi.enabled 为 true。

 

 

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
    <!-- 控制台输出 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %msg:日志消息,%n:换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
    </appender>

    <!--myibatis log configure-->
    <logger name="com.apache.ibatis" level="TRACE"/>
    <logger name="java.sql.Connection" level="DEBUG"/>
    <logger name="java.sql.Statement" level="DEBUG"/>
    <logger name="java.sql.PreparedStatement" level="DEBUG"/>

    <!-- 日志输出级别 -->
    <root level="INFO">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE" />
    </root>
</configuration>

 

 

假如在 logback.xml 中配置如上内容,使用 %clr 转换词配置彩色输出,那么需要将 pattern 标签中的内容替换为:

 

<!-- 比如 -->
%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%5p) %clr(${PID}){magenta} %clr(---){faint} %clr(%logger{36}){cyan} %clr(:){faint} %msg%n

 

【输出到文件】

默认情况下,spring boot 日志仅仅输出到控制台,并不会写出到日志文件。如果想要输出日志文件,那么需要在 application.properties 文件中指定 logging.file 或者 logging.path 的值。

 

 ① 指定 logging.file 的值,比如 logging.file=my.log,那么日志将会生成到项目根目录下的 my.log 文件中;

 ② 指定 logging.path 的值,比如 logging.path=/var/log,那么日志将会生成到 /var/log 目录下的 spring.log 文件中。

 

注意,如果同时设置了 logging.file 和 logging.path 的值,那么 logging.path 将不会生效

 

当日志文件达到 10MB 时,会产生另一个新的日志文件,文件大小的值可以通过 logging.file.max-size 指定。如果没有指定 logging.file.max-history 的值,那么日志文件将被一直保存。

 

NOTE:由于日志系统初始化早于 application 生命周期,因此无法通过 @PropertySource 注解加载到属性文件中日志的属性值!

 

【日志等级】

 所有 spring boot 所支持的日志系统都可以在 spring 环境中设置日志等级。日志等级可以设置为:TRACE, DEBUG, INFO, WARN, ERROR, FATAL, 或者 OFF。比如:

logging.level.root=WARN
logging.level.org.springframework.web=DEBUG
logging.level.org.hibernate=ERROR

 

【自定义日志配置】

可以通过在 classpath 的根目录下设置配置文件或者设置 logging.config 的属性值指定具体配置文件的路径来自定义日志配置。

也可以通过设置 Java 系统属性 org.springframework.boot.logging.LoggingSystem 的值来让 spring boot 使用具体的日志系统,该属性的值为日志系统实现类的全限定名

如果值设置为 none,会禁用 spring boot 的日志系统。

 

下列日志 系统,spring boot 会加载对应的日志配置文件:

 
spring boot 特性之 Logging
            
    
    博客分类: SpringBoot springbootSpringBootlogginglog 

 

如果使用 logback 日志系统(默认),推荐将配置文件命名为 logback-spring.xml 或者 logback-spring.groovy 。
 

 【Logback日志扩展】

spring boot 对 Logback 日志做了一些扩展来实现高级配置。不过这些配置需要放在 logback-spring.xml 配置文件中,因为标准的 logback.xml 配置文件加载的时机非常早,所以无法在里面使用扩展内容。

注意,扩展的内容无法和 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]]

 

        1. 特定 Profile 配置

        <springProfile> 标签可以选择性的包含或排除那些基于激活的 spring porfiles 的配置片段, 这些 profile 片段只要放置于 <configuration> 标签中即可。使用 name 属性来指定使用的 profile 配置名称,name 中要指定多个 profile 名称的,使用逗号分割:

<springProfile name="staging">
	<!-- 当名称为 staging 的 profile 被激活时,本段配置才会生效 -->
</springProfile>

<springProfile name="dev, staging">
	<!-- 当名称为 dev 或 staging 的 profile 被激活时,本段配置才会生效 -->
</springProfile>

<springProfile name="!production">
	<!-- 当名称为 production 的 profile 被未激活时,本段配置才会生效 -->
</springProfile>

 

        2. 环境属性

        <springProperty> 标签使得在使用 Logback 日志时,可以直接使用 spring 环境中的属性值。比如,在 Logback 的配置中使用 application.properties 文件中的属性值。在 <springProperty> 中使用 source 来指定来自 spring 环境中的属性名称。如果这个引用的值不仅仅在本标签中,可以将 scope 属性值设置为其他(比如 context),如果指定的属性名不在 spring 环境中,那么可以通过 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>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • spring boot 特性之 Logging
            
    
    博客分类: SpringBoot springbootSpringBootlogginglog 
  • 大小: 14.4 KB