Spring Boot在所有内部日志中使用Commons Logging,但是默认配置也提供了对常用日志的支持,如:Java Util Logging,Log4J, Log4J2和Logback。每种Logger都可以通过配置使用控制台或者文件输出日志内容。
格式化日志
默认的日志输出如下:
2016-04-13 08:23:50.120 INFO 37397 --- [ main] org.hibernate.Version : HHH000412: Hibernate Core {4.3.11.Final}
输出内容元素具体如下:
- 时间日期 — 精确到毫秒
- 日志级别 — ERROR, WARN, INFO, DEBUG or TRACE
- 进程ID
- 分隔符 —
---
标识实际日志的开始 - 线程名 — 方括号括起来(可能会截断控制台输出)
- Logger名 — 通常使用源代码的类名
- 日志内容
级别控制
默认情况下,INFO级别以上的信息才会打印到控制台,可以自己设定日志输出级别,只需在application.properties
中进行配置完成日志记录的级别控制。
配置格式:logging.level.*=LEVEL
logging.level
:日志级别控制前缀,*
为包名或Logger名LEVEL
:选项TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF
举例:
logging.level.root=WARN:root日志以WARN级别输出
#org包下的日志级别
logging.level.org=warn
logging.level.com.yang=debug
指定默认的级别是warn,但是包名是org开头的类,日志级别是WARN,org包名的类大多是是第三方依赖的库,有时候没必要显示INFO级别的信息,com.yang开头的类使用debug级别。
文件输出
Spring Boot默认并没有输出日志到文件,若要增加文件输出,需要在application.properties
中配置logging.file
或logging.path
属性。
#设置文件,可以是绝对路径,也可以是相对路径。如:
logging.file=my.log
#设置目录,会在该目录下创建spring.log文件,并写入日志内容,如:
logging.path=/var/log
日志文件会在10Mb大小的时候被截断,产生新的日志文件,默认级别为:ERROR、WARN、INFO
自定义输出格式
Spring Boot支持对控制台日志输出和文件输出进行格式控制,代码如下:
logging.pattern.file=%d{yyyy/MM/dd-HH:mm} [%thread] %-5level %logger- %m%n
logging.pattern.console=%d{yyyy/MM/dd-HH:mm:ss} [%thread] %-5level %logger- %m%n
pattern简单说明:
%d{HH:mm:ss.SSS}——日志输出时间
%thread——输出日志的进程名字,方括号括起来。这个信息在Web应用以及异步任务处理中很有用。
%-5level——日志级别,并且使用5个字符靠左对齐
%logger{n}——日志输出者的名字,包名+类名,{n}限定了输出长度,如果长度不够,尽可能显示类名压缩包名。
%m——日志消息
%n——平台的换行符
%M——日志发生时的方法名
%L——日志发生时所在的代码行
多彩输出
如果你的终端支持ANSI,设置彩色输出会让日志更具可读性。通过在application.properties
中设置spring.output.ansi.enabled
参数来支持。
- NEVER:禁用ANSI-colored输出(默认项)
- DETECT:会检查终端是否支持ANSI,是的话就采用彩色输出(推荐项)
- ALWAYS:总是使用ANSI-colored格式输出,若终端不支持的时候,会有很多干扰信息,不推荐使用