专栏首页代码拾遗Spring Boot 2.0 教程 - 日志详解

Spring Boot 2.0 教程 - 日志详解

Spring Boot 内部使用commons logging 作为日志输出工具,同时也可以配置其他的工具例如,Java Logging,Log4j2,logback。 默认情况下,如果加入了starter,默认使用Logback输出日志。

日志格式

默认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
  • --- 作为分割符,区别日志开始和真正日志
  • 线程名,使用中括号括起来
  • Logger名,一般是输出日志的类名
  • 日志信息

注意Logback没有FATAL级别的日志,他映射为ERROR

终端输出

默认情况下Spring Boot将日志输出到控制台,默认输出ERROR,WARN,INFO级别的日志。可以通过--debug参数开启DEBUG级别的输出

java -jar app.jar --debug

或者是在application.properties中设置debug=true开启DEBUG级别的日志 当开启DEBUG级别的日志的时候,其他组件例如(内置容器,Hibernate等)都会输出DEBUG信息。

彩色输出

如果控制台支持ANSI,那么可以使用彩色输出。可以在application.properties文件配置spring.output.ansi.enabled设置重写自动检测。 颜色的代码又%clr配置。例如%clr(%5p) 默认各个级别的日志的颜色

  • FATAL 红色
  • ERROR 红色
  • WARN 黄色
  • INFO 绿色
  • DEBUG 绿色
  • TRACE 绿色

同样也可以自己指定颜色,例如

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

其他支持的颜色有,blue,cyan,faint,green,magenta,red,yellow。

文件输出

默认情况下,Spring Boot不输出日志到文件中,如果需要输出日志到文件中,需要配置logging.file或者logging.path属性,例如在application.properties文件中配置。 logging.file指定输出的文件名,可以是相对路径有可以是绝对路径。 logging.path指定输出的文件目录,输出文件默认为spring.log。同样可以设置相对或者绝对路径。 默认情况下,日志超过10M就会自动进行日志rotate。可以通过设置logging.file.max-size属性设置最大的日志文件限制。logging.file.max-history属性可以设置最多保存多少日志,如果不设置,早期文件会被归档并不会被删除。

日志级别

日志的级别可以通过logging.level.<logger-name>=<level>设置,例如设置root的日志级别

logging.level.root=WARN
logging.level.org.springframework.web=DEBUG
logging.level.org.hibernate=ERROR
配置日志

Spring Boot 日志配置如下

Environment

System Property

解释

logging.exception-conversion-word

LOG_EXCEPTION_CONVERSION_WORD

记录异常是如何进行转换

logging.file

LOG_FILE

配置日志文件

logging.file.max-size

LOG_FILE_MAX_SIZE

日志最大容量

logging.file.max-history

LOG_FILE_MAX_HISTORY

归档文件的数量

logging.path

LOG_PATH

log输入路径,默认暑促spring.log

logging.pattern.console

CONSOLE_LOG_PATTERN

输出到控制台的格式

logging.pattern.dateformat

LOG_DATEFORMAT_PATTERN

输入时间格式

logging.pattern.file

FILE_LOG_PATTERN

输出到文件的格式

logging.pattern.level

LOG_LEVEL_PATTERN

log级别

PID

PID

线程ID

Logback扩展

可以通过logback-spring.xml 对logback尽显扩展配置。因为logback.xml 加载很早,所以需要使用logback-spring.xml或者logging.config配置Spring的logback属性。

指定Spring 的Profile

可以通过 springProfile觉得在哪个环境中使用,

<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>
环境变量的属性

可以通过<springProperty>获取Spring Environment的配置属性

<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>

本文分享自微信公众号 - 代码拾遗(gh_8f61e8bcb1b1)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-05-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • SpringMVC 教程 - 异步请求

    在Servlet容器中启动异步支持之后,controller的方法可以通过DeferredResult包装返回值来支持异步处理。例如:

    代码拾遗
  • SpringMVC 教程 - Filter

    浏览器只能通过GET或者POST提交FORM数据,但是非浏览器的客户端可以使用PUT或者PATCH。Servlet API仅为POST方法提供了ServletR...

    代码拾遗
  • 深入理解Spring MVC

    使用Spring Boot和web,thymeleaf的starter来设置初始工程。xml配置如下:

    代码拾遗
  • Spring Boot 2.0.0参考手册_中文版_Part IV_26

    Spring Boot所有的内部日志都采用Commons Logging,但开放了底层的日志实现。提供了对Java Util Logging,Log4J2和Lo...

    Tyan
  • 【Python】使用logging打日志

    https://zhuanlan.zhihu.com/p/31893724 https://zhuanlan.zhihu.com/p/32043593

    keloli
  • 为什么要使用SLF4J而不是Log4J

    本文由 ImportNew - Jaskey 翻译自 javarevisited。欢迎加入翻译小组。转载请见文末要求。

    sanmutongzi
  • Spring Boot 2动态修改日志级别

    作为程序猿,定位问题是我们的日常工作,而日志是我们定位问题非常重要的依据。传统方式定位问题时,往往是如下步骤:

    张乘辉
  • python3 logging模块

    很多程序都有记录日志的需求,并且日志包含的信息有正常的程序访问日志还可能有错误,警告等信息输出,python的logging模块提供了标准的日志接口,可以通过它...

    用户1679793
  • Python日志logging模块使用详解

    每个语言都会有自己的日志模块,Python也不例外。通常情况下当需要使用到日志的时候, 一般都是匆匆查找下资料,按照步骤进行下配置就是完事了,不太会去总结日志模...

    上帝De助手
  • python保存日志

    作为初学者,打印习惯了用print,昨天我们在用nodejs调用python的时候,python的打印信息我们看不到,这个很不利于问题的定位。因为打包成可执行文...

    efonfighting

扫码关注云+社区

领取腾讯云代金券