Spring Boot Logging 配置

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,因此 我們不需要分開加入他們。

image.png

如果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è)文件記錄日志

image.png

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容