Spring boot日志
Spring Boot在所有內(nèi)部日志中使用Commons Logging,但是默認(rèn)配置也提供了對(duì)常用日志的支持,如:Java Util Logging,Log4J, Log4J2和Logback。每種Logger都可以通過配置使用控制臺(tái)或者文件輸出日志內(nèi)容。
格式化日志
默認(rèn)的日志輸出如下:
2016-04-13 08:23:50.120 INFO 37397 --- [ main] org.hibernate.Version : HHH000412: Hibernate Core {4.3.11.Final}
輸出內(nèi)容元素:
- 時(shí)間日期 — 精確到毫秒
- 日志級(jí)別 — ERROR, INFO, DEBUG or TRACE, WARN
- 進(jìn)程ID
- 分隔符 — --- 標(biāo)識(shí)實(shí)際日志的開始
- 線程名 — 方括號(hào)括起來(可能會(huì)截?cái)嗫刂婆_(tái)輸出)
- Logger名 — 通常使用源代碼的類名
- 日志內(nèi)容
控制臺(tái)輸出
在Spring Boot中默認(rèn)配置了ERROR、WARN和INFO級(jí)別的日志輸出到控制臺(tái)。
我們可以通過兩種方式切換至DEBUG級(jí)別:
(1)在運(yùn)行命令后加入--debug標(biāo)志,如:$ java -jar myapp.jar –debug
(2)在application.properties中配置debug=true,該屬性置為true的時(shí)候,核心Logger(包含嵌入式容器、hibernate、spring)會(huì)輸出更多內(nèi)容,但是自己應(yīng)用的日志并不會(huì)輸出為DEBUG級(jí)別。
文件輸出
Spring Boot默認(rèn)配置只會(huì)輸出到控制臺(tái),并不會(huì)記錄到文件中,但是我們通常生產(chǎn)環(huán)境使用時(shí)都需要以文件方式記錄。
若要增加文件輸出,需要在application.properties中配置logging.file或logging.path屬性。
logging.file,設(shè)置文件,可以是絕對(duì)路徑,也可以是相對(duì)路徑。如:logging.file=my.log
logging.path,設(shè)置目錄,會(huì)在該目錄下創(chuàng)建spring.log文件,并寫入日志內(nèi)容,如:logging.path=/var/log
- 日志文件會(huì)在10Mb大小的時(shí)候被截?cái)啵a(chǎn)生新的日志文件,默認(rèn)級(jí)別為:ERROR、WARN、INFO
級(jí)別控制
在Spring Boot中只需要在application.properties中進(jìn)行配置完成日志記錄的級(jí)別控制。
配置格式:logging.level.=LEVEL
logging.level:日志級(jí)別控制前綴,為包名或Logger名
LEVEL:選項(xiàng)TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF
舉例:
logging.level.com.kfit=DEBUG:com.kfit包下所有class以DEBUG級(jí)別輸出
logging.level.root=WARN:root日志以WARN級(jí)別輸出
Level | 描述 |
---|---|
ALL | 各級(jí)包括自定義級(jí)別 |
DEBUG | 指定細(xì)粒度信息事件是最有用的應(yīng)用程序調(diào)試 |
ERROR | 錯(cuò)誤事件可能仍然允許應(yīng)用程序繼續(xù)運(yùn)行 |
FATAL | 指定非常嚴(yán)重的錯(cuò)誤事件,這可能導(dǎo)致應(yīng)用程序中止 |
INFO | 指定能夠突出在粗粒度級(jí)別的應(yīng)用程序運(yùn)行情況的信息的消息 |
OFF | 這是最高等級(jí),為了關(guān)閉日志記錄 |
TRACE | 指定細(xì)粒度比DEBUG更低的信息事件 |
WARN | 指定具有潛在危害的情況 |
日志記錄器(Logger)的行為是分等級(jí)的。
如下表所示:
分為OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、ALL或者您定義的級(jí)別。
Log4j建議只使用四個(gè)級(jí)別,優(yōu)先級(jí)從高到低分別是ERROR、WARN、INFO、DEBUG。
通過在這里定義的級(jí)別,您可以控制到應(yīng)用程序中相應(yīng)級(jí)別的日志信息的開關(guān)。
比如在這里定義了INFO級(jí)別,則應(yīng)用程序中所有DEBUG級(jí)別的日志信息將不被打印出來。
程序會(huì)打印高于或等于所設(shè)置級(jí)別的日志,設(shè)置的日志等級(jí)越高,打印出來的日志就越少。
如果設(shè)置級(jí)別為INFO,則優(yōu)先級(jí)高于等于INFO級(jí)別(如:INFO、WARN、ERROR)的日志信息將可以被輸出,小于該級(jí)別的如DEBUG將不會(huì)被輸出。
自定義輸出格式
在Spring Boot中可以通過在application.properties配置如下參數(shù)控制輸出格式:
logging.pattern.console:定義輸出到控制臺(tái)的樣式(不支持JDK Logger)
logging.pattern.file:定義輸出到文件的樣式(不支持JDK Logger)
########################################################
###打印log日志
########################################################
logging:
level:
root: warn
org.springframework.web: debug
com.springboot.backstage.dao: debug
file: my.log
Spring boot日志logback
使用步驟
- 1、在 src/main/resources 下面創(chuàng)建logback-spring.xml (根據(jù)不同環(huán)境來定義不同的日志輸出,那么取名為logback-spring.xml 即可) 文件,并按上面講述的進(jìn)行配置。 ?或者使用最簡(jiǎn)單的方法在 application 配置文件中配置。
- 2、在Java代碼中創(chuàng)建實(shí)例,并在需要輸出日志的地方使用。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/base.xml" />
<logger name="org.springframework.web" level="DEBUG"/>
<logger name="org.springboot.sample" level="TRACE" />
<logger name="com.springboot.backstage.dao" level="DEBUG" />
<springProfile name="dev">
<logger name="org.springboot.sample" level="DEBUG" />
</springProfile>
<springProfile name ="test"> >
<logger name="org.springboot.sample" level="INFO" />
</springProfile>
</configuration>
Spring boot日志log4j2
引入依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<!--需要忽略自帶日志框架-->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- log4j. -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
配置xml文件
在resources下新建log4j2.xml
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<properties>
<!-- 文件輸出格式 -->
<property name="PATTERN">%d{yyyy-MM-dd HH:mm:ss.SSS} |-%-5level [%thread] %c [%L] -| %msg%n</property>
</properties>
<appenders>
<Console name="CONSOLE" target="system_out">
<PatternLayout pattern="${PATTERN}" />
</Console>
</appenders>
<loggers>
<logger name="com.springboot.backstage.dao" level="debug" />
<root level="info">
<appenderref ref="CONSOLE" />
</root>
</loggers>
</configuration>