Spring Boot 能夠使用Logback, Log4J2 , java util logging 作為日志記錄工具问词。Spring Boot 默認(rèn)使用Logback作為日志記錄工具哗魂。日志默認(rèn)輸出到控制臺(tái)但也能輸出到文件中燎窘。我們通過spring-boot-starter-logging 加入Logback依賴,其實(shí)只要我們加入任意的Spring Boot starter 都會(huì)默認(rèn)引入spring-boot-starter-logging椒惨,因此 我們不需要分開加入他們系洛。
如果Logback JAR在類路徑一直可用那么Spring Boot 將一直選擇Logback 記錄日志。所以想用其他的日志工具如Log4J2硼砰,我們需要去除Logback JAR并且在類路徑中加入Log4J2的依賴。如果使用Logback記錄日志我們不用做任何事情欣硼,只要在application.properties或者application.yml中配置日志級(jí)別就可以了。console默認(rèn)輸入ERROR, WARN 恶阴,INFO級(jí)別的日志诈胜。可通過修改logging.level屬性來改變?nèi)罩镜妮敵黾?jí)別冯事〗剐伲可以通過配置logging.file屬性或logging.path屬性將日志輸出到文件中。當(dāng)文件到達(dá)10M的時(shí)候昵仅,將新建一個(gè)文件記錄日志
logging.level.* : 作為package(包)的前綴來設(shè)置日志級(jí)別缓熟。
logging.file :配置日志輸出的文件名累魔,也可以配置文件名的絕對(duì)路徑。
logging.path :配置日志的路徑够滑。如果沒有配置logging.file,Spring Boot 將默認(rèn)使用spring.log作為文件名垦写。
logging.pattern.console :定義console中l(wèi)ogging的樣式。
logging.pattern.file :定義文件中日志的樣式彰触。
logging.pattern.level :定義渲染不同級(jí)別日志的格式梯投。默認(rèn)是%5p.
logging.exception-conversion-word :.定義當(dāng)日志發(fā)生異常時(shí)的轉(zhuǎn)換字
PID :定義當(dāng)前進(jìn)程的ID
下面將討論在application.properties , application.ym ,Logback XML中配置Logback以及在Spirng Boot 應(yīng)用中使用Log4J2.
1.logging.level
logging.level設(shè)置日志級(jí)別。我們可以使用TARCE , DEBUG , INFO , WARN , ERROR , FATAL , OFF 况毅》直停可以使用root級(jí)別和package級(jí)別來控制日志的輸入級(jí)別。創(chuàng)建一個(gè)具有以下依賴關(guān)系的應(yīng)用程序尔许。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
使用src\main\resources\application.properties配置日志級(jí)別
logging.level.root= WARN
logging.level.org.springframework.security= DEBUG
logging.level.org.springframework.web= ERROR
logging.level.org.hibernate= DEBUG
logging.level.org.apache.commons.dbcp2= DEBUG
使用src\main\resources\application.yml
logging:
level:
root: WARN
org:
springframework:
security: DEBUG
web: ERROR
hibernate: DEBUG
apache:
commons:
dbcp2: DEBUG
2.logging.file
Spring Boot 默認(rèn)把日志輸入到console么鹤,如果我們要把日志輸入到文件中,需要配置logging.file 或者logging.path屬性性味廊。logging.file屬性用來定義文件名蒸甜。他不僅僅可以配置文件名,也可以路徑+文件名毡们。
logging.level.org.springframework.security= DEBUG
logging.level.org.hibernate= DEBUG
logging.file = mylogfile.log
在這種情況下mylogfile.log將在根目錄中創(chuàng)建迅皇。我們也可以為為mylogfile.log分配一個(gè)路徑,如concretepage/mylogfile.log衙熔。這種情況下我們將在相對(duì)根目錄下創(chuàng)建concretepage/mylogfile.log登颓。我們也可以為日志文件配置絕對(duì)路徑。
application.yml中配置
logging:
level:
org:
springframework:
security: DEBUG
hibernate: DEBUG
file: mylogfile.log
3.logging.path
配置logging.path或者logging.path屬性將日志輸出到文件夾中红氯。logging.path屬性用來定義日志文件路徑
在application.properties中配置logging.path屬性
logging.level.org.springframework.security= DEBUG
logging.level.org.hibernate= DEBUG
logging.path = concretepage/logs
將會(huì)相對(duì)根路徑下創(chuàng)建concretepage/logs/spring.log ,也可以配置絕對(duì)路徑
application.yml配置
logging:
level:
org:
springframework:
security: DEBUG
hibernate: DEBUG
path: concretepage/logs
4.logging.patter.console
通過設(shè)置logging.patter.console屬性我們能改變輸出到console的日志樣式框咙。日志樣式包括時(shí)間,日志級(jí)別痢甘,線程名喇嘱,日志名以及消息。我們可以按我們的喜好改變?nèi)罩緲邮健?br> application.properties
logging.level.org.springframework.security= DEBUG
logging.level.org.hibernate= DEBUG
logging.pattern.console= %d{yyyy-MMM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{15} - %msg%n
application.yml
logging:
level:
org:
springframework:
security: DEBUG
hibernate: DEBUG
pattern:
console: '%d{yyyy-MMM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{15} - %msg%n'
5.logging.pattern.file
改變文件中的日志樣式我們需要設(shè)置logging.pattern.file屬性塞栅。首先通過logging.file或logging.path屬性者铜,把日志記錄到文件中。
logging.level.org.springframework.security= DEBUG
logging.level.org.hibernate= DEBUG
logging.path = concretepage/logs
logging.pattern.file= %d{yyyy-MMM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{15} - %msg%n
logging.pattern.console= %d{yyyy-MMM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{15} - %msg%n
通過logging.path屬性將在根目錄下創(chuàng)建concretepage/logs并默認(rèn)使用spring.log作為文件名放椰。logging.pattern.console是設(shè)置console的日志樣式
application.yml
logging:
level:
org:
springframework:
security: DEBUG
hibernate: DEBUG
path: concretepage/logs
pattern:
file: '%d{yyyy-MMM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{15} - %msg%n'
console: '%d{yyyy-MMM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{15} - %msg%n'
通過命令行改變?nèi)罩镜妮敵黾?jí)別
Sping Boot 默認(rèn)輸出ERROR , WARN , INFO 級(jí)別的日志作烟。我們可以通過命令行使能DEBUG ,TRACE級(jí)別的日志輸出,效果是跟配置文件一樣的砾医。想象我們有一個(gè)名為my-app.jar的可執(zhí)行的JAR包我們可以在啟動(dòng)應(yīng)用是使能DEBUG級(jí)別日志輸出拿撩。
java -jar my-app.jar --debug
在application.properties中配置
debug=true
application.yml
debug=true
相同的方式使能TRACE級(jí)別的日志
java -jar my-app.jar --trace
application.properties
trace=true
application.yml
trace=true
在應(yīng)用程序中記錄日志
創(chuàng)建一個(gè)SLF4J的例子,首先獲得org.slf4j.Logger的實(shí)例如蚜。
package com.concretepage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class MyApplication {
private static final Logger logger = LoggerFactory.getLogger(MyApplication.class);
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
logger.debug("--Application Started--");
}
}
在application.properties配置包c(diǎn)om.concretepage日志記錄級(jí)別
logging.level.root= WARN
logging.level.org.springframework.web= ERROR
logging.level.com.concretepage= DEBUG
輸出
2017-03-25 19:03:54.189 DEBUG 4828 --- [ main] com.concretepage.MyApplication : Running with Spring Boot v1.5.2.RELEASE, Spring v4.3.7.RELEASE
2017-03-25 19:03:54.189 INFO 4828 --- [ main] com.concretepage.MyApplication : No active profile set, falling back to default profiles: default
2017-03-25 19:03:58.846 INFO 4828 --- [ main] com.concretepage.MyApplication : Started MyApplication in 5.209 seconds (JVM running for 5.66)
2017-03-25 19:03:58.846 DEBUG 4828 --- [ main] com.concretepage.MyApplication : --Application Started--
使用Logback XML 文件
Sping Boot中默認(rèn)使用logback, 我們可以在application.properties或者application.yml中設(shè)置日志級(jí)別压恒。如果想使用XML配置Logback,我們需要在類路徑下創(chuàng)建logback-spring.xml文件
src\main\resources\logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/base.xml"/>
<logger name="org.springframework.web" level="ERROR"/>
<logger name="com.concretepage" level="DEBUG"/>
</configuration>
使用自定義日志:Log4J2
我們使用任何的starter,默認(rèn)加入Logback 依賴spring-boot-starter-logging影暴。為了使用Log4J2,我們首先要去除spring-boot-starter-logging并且引入spring-boot-starter-log4j2 依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<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>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
現(xiàn)在我們可以在類路徑下創(chuàng)建并配置log4j2-spring.xml
原文:http://www.concretepage.com/spring-boot/spring-boot-logging-example