Spring Boot日志使用

Spring Boot使用Commons Logging进行所有内部日志记录,也为Java Util LoggingLog4J2Logback提供了默认配置。在每种情况下,日志都预先配置为使用控制台输出,并提供可选的文件输出。

默认情况下,如果您使用“Starters”,则使用Logback进行日志记录。还包括适当的Logback路由,以确保使用Java Util LoggingCommons LoggingLog4JSLF4J的依赖库全部正常工作。

常用的日志框架

  • Log4j:Log4j是apache下一个功能非常丰富的java日志库实现,功能非常强大,通过Log4j可以把日志输出到控制台、文件、用户界面。也可以输出到操作系统的事件记录器和一些系统常驻进程。Log4j还允许非常便捷地自定义日志格式和日志等级,可以帮助开发人员全方位的掌控自己的日志信息。

  • Log4j2:Log4j2是Log4j1的升级版本,基于Log4j做了很多优化和改变。

  • Logback:Logback是由Log4j创始人设计的另一个开源日志组件,也是作为Log4j的替代者出现的。而且官方是建议和Slf4j一起使用。Logback是在Log4j的基础上做的改进版本,而Slf4j又是同一个人设计的,所以默认就对Slf4j无缝结合。

  • Java Util Logging:提供Java平台核心日志记录工具的类和接口。

两个比较广泛的统一日志规范接口:

  • SLF4j:SLF4j(Simple Logging Facade For Java)是基于API的java日志框架,SLF4j提供了一个简单统一的日志记录接口,开发者在配置和部署时,只需要实现这个接口就可以实现日志功能。

  • Commons-Logging:Common-logging 为众多具体的日志实现库提供了一个统一的接口,和SLF4j的作用类似,它允许在运行时绑定任意的日志库。

默认日志格式

Spring Boot的默认日志输出类似于以下格式:

1
2
3
4
5
2018-06-04 21:02:18.158  INFO 4584 --- [           main] c.skh.springboot.SpringbootApplication   : Starting SpringbootApplication on U51SU5XW3L4M04W with PID 4584 (E:\ideaProject\springboot\springsecurity\target\classes started by Administrator in E:\ideaProject\springboot)
2018-06-04 21:02:18.178 INFO 4584 --- [ main] c.skh.springboot.SpringbootApplication : No active profile set, falling back to default profiles: default
2018-06-04 21:02:18.345 INFO 4584 --- [ main] ConfigServletWebServerApplicationContext : Refreshing org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@6e75aa0d: startup date [Mon Jun 04 21:02:18 CST 2018]; root of context hierarchy
2018-06-04 21:02:21.697 INFO 4584 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
2018-06-04 21:02:21.765 INFO 4584 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]

其中:

  • 时间日期 — 精确到毫秒

  • 日志级别 — ERROR, WARN, INFO, DEBUG or TRACE

  • 进程ID

  • 分隔符 — --- 标识实际日志的开始

  • 线程名 — 方括号括起来(可能会截断控制台输出)

  • Logger名 — 通常使用源代码的类名

  • 日志内容

文件输出

默认情况下,Spring Boot仅记录到控制台,不写入日志文件。如果除了控制台输出之外还想写日志文件,则需要设置logging.filelogging.path属性(例如,在application.properties中)。

下表展示如何组合使用 logging.*

logging.file logging.path 示例 描述
(none) (none) 只记录到控制台
Specific file (none) my.log 写入指定的日志文件。名称可以是确切的位置或相对于当前目录。
(none) Specific directory /var/log 写到特定目录下的 spring.log 里,名称可以是精确的位置或相对于当前目录。

日志文件每达到10M就会被分割,跟控制台一样,默认记录 ERROR ,WARN 和 INFO 级别的信息。可以使用logging.file.max-size属性更改大小限制。除非已设置logging.file.max-history属性,否则之前旋转的文件将无限期地归档。

日志级别

所有Spring Boot支持的日志系统都可以在Spring Environment 中设置级别(application.properties 里也一样),设置格式为'logging.level.*=LEVEL',其中 LEVEL 是 TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF 之一。以下是application.properties 示例:

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

Logback简单使用

Spring Boot包含很多有用的Logback扩展,你可以在logback-spring.xml配置文件中使用它们。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true">
<property name="LOG_HOME" value="tp/log"/>
<!-- 输出到控制台 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender" >
<!-- 输出的格式 -->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}: %msg%n</pattern>
</encoder>
</appender>

<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 配置滚动的策略 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志名称的格式 -->
<fileNamePattern>${LOG_HOME}/logback.log.%d{yyyy-MM-dd}</fileNamePattern>
<!-- 保存的最长时间:天数 -->
<MaxHistory>10</MaxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}: %msg%n</pattern>
</encoder>
</appender>

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

更多学习资料