Spring Boot 中 Logging 配置

下面給下我的默認配置:

logging.file=demo.log
logging.level.root=info    
logging.level.com.test.framework=DEBUG
logging.pattern.file=%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
logging.pattern.console=%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
logging.file.max-size=100M
logging.file.max-history=10

logging.config=classpath:conf/xml/logback.xml #用于配置外部logback.xml

logback.xml配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <property name="LOG_HOME" value="./logs" />
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="rollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/demo.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/demo.%d{yyyy-MM-dd}.log</fileNamePattern>
        </rollingPolicy>
        <encoder> 
            <pattern>%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>


    <appender name="errorRollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/error.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                 <maxFileSize>200mb</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <maxHistory>10</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter"> 
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>



    <appender name="async-rollingFile" class="ch.qos.logback.classic.AsyncAppender">
        <appender-ref ref="rollingFile" />
        <discardingThreshold>0</discardingThreshold>
        <queueSize>512</queueSize>
    </appender>


    <appender name="dao-rollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>./logs/dao.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy  class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>500mb</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <maxHistory>10</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>
    <appender name="async-daoRollingFile" class="ch.qos.logback.classic.AsyncAppender">
        <appender-ref ref="dao-rollingFile" />
        <includeCallerData>true</includeCallerData>
    </appender>


    <logger name="java.sql.PreparedStatement" level="DEBUG" />
    <logger name="com.apache.ibatis" level="DEBUG" />
    <logger name="org.mybatis" level="DEBUG" />
    <logger name="com.google.code" level="INFO" />
    <logger name="java.sql.Connection" level="DEBUG" />
    <logger name="java.sql.Statement" level="DEBUG" />
    <logger name="java.sql.PreparedStatement" level="DEBUG" />
    <logger name="org.springframework.amqp" level="INFO" />
    <logger name="org.springframework" level="INFO" />
    <logger name="druid.sql" level="INFO" />
    <logger name="org.quartz" level="ERROR" />
    <!-- 將某一個包下日志單獨打印日志 -->
    <logger name="com.test.demo.dao" 
       level="INFO" additivity="false">
                <appender-ref ref="async-daoRollingFile" />
        </logger>

    <root level="debug">
        <appender-ref ref="console" />
        <!-- <appender-ref ref="async-rollingFile" />
    </root>
</configuration>

Spring Boot 能夠使用Logback, Log4J2 , java util logging 作為日志記錄工具叁丧。Spring Boot 默認使用Logback作為日志記錄工具。日志默認輸出到控制臺但也能輸出到文件中。我們通過spring-boot-starter-logging 加入Logback依賴踱卵,其實只要我們加入任意的Spring Boot starter 都會默認引入spring-boot-starter-logging贴谎,因此 我們不需要分開加入他們。

image

如果Logback JAR在類路徑一直可用那么Spring Boot 將一直選擇Logback 記錄日志。所以想用其他的日志工具如Log4J2痒谴,我們需要去除Logback JAR并且在類路徑中加入Log4J2的依賴稚铣。如果使用Logback記錄日志我們不用做任何事情箱叁,只要在application.properties或者application.yml中配置日志級別就可以了。console默認輸入ERROR, WARN 惕医,INFO級別的日志耕漱。可通過修改logging.level屬性來改變?nèi)罩镜妮敵黾墑e抬伺∶唬可以通過配置logging.file屬性或logging.path屬性將日志輸出到文件中。當文件到達10M的時候沛简,將新建一個文件記錄日志

image

logging.level. :* 作為package(包)的前綴來設(shè)置日志級別齐鲤。
logging.file :配置日志輸出的文件名,也可以配置文件名的絕對路徑椒楣。
logging.path :配置日志的路徑给郊。如果沒有配置logging.file,Spring Boot 將默認使用spring.log作為文件名。
logging.pattern.console :定義console中l(wèi)ogging的樣式捧灰。
logging.pattern.file :定義文件中日志的樣式淆九。
logging.pattern.level :定義渲染不同級別日志的格式。默認是%5p.
logging.exception-conversion-word :.定義當日志發(fā)生異常時的轉(zhuǎn)換字
PID :定義當前進程的ID

下面將討論在application.properties , application.ym ,Logback XML中配置Logback以及在Spirng Boot 應用中使用Log4J2.

1.logging.level

logging.level設(shè)置日志級別毛俏。我們可以使用TARCE , DEBUG , INFO , WARN , ERROR , FATAL , OFF 炭庙。可以使用root級別和package級別來控制日志的輸入級別煌寇。創(chuàng)建一個具有以下依賴關(guān)系的應用程序焕蹄。

<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配置日志級別

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 默認把日志輸入到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分配一個路徑击纬,如concretepage/mylogfile.log鼎姐。這種情況下我們將在相對根目錄下創(chuàng)建concretepage/mylogfile.log。我們也可以為日志文件配置絕對路徑。
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  

將會相對根路徑下創(chuàng)建concretepage/logs/spring.log ,也可以配置絕對路徑

application.yml配置

logging:
  level:
    org:
      springframework:
        security: DEBUG
    hibernate: DEBUG

  path: concretepage/logs  

4.logging.patter.console

通過設(shè)置logging.patter.console屬性我們能改變輸出到console的日志樣式饭尝。日志樣式包括時間,日志級別谋作,線程名芋肠,日志名以及消息。我們可以按我們的喜好改變?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并默認使用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)罩镜妮敵黾墑e
Sping Boot 默認輸出ERROR , WARN , INFO 級別的日志睡汹。我們可以通過命令行使能DEBUG ,TRACE級別的日志輸出,效果是跟配置文件一樣的寂殉。想象我們有一個名為my-app.jar的可執(zhí)行的JAR包我們可以在啟動應用是使能DEBUG級別日志輸出囚巴。

java -jar my-app.jar --debug  

在application.properties中配置

debug=true  

application.yml

debug=true  

相同的方式使能TRACE級別的日志

java -jar my-app.jar --trace  

application.properties

trace=true

application.yml

trace=true

在應用程序中記錄日志
創(chuàng)建一個SLF4J的例子,首先獲得org.slf4j.Logger的實例友扰。

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配置包com.concretepage日志記錄級別

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中默認使用logback, 我們可以在application.properties或者application.yml中設(shè)置日志級別彤叉。如果想使用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,默認加入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)容合作請聯(lián)系作者
  • 序言:七十年代末村怪,一起剝皮案震驚了整個濱河市秽浇,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌甚负,老刑警劉巖柬焕,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異梭域,居然都是意外死亡斑举,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門病涨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來富玷,“玉大人,你說我怎么就攤上這事既穆∈昱常” “怎么了?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵循衰,是天一觀的道長。 經(jīng)常有香客問我褐澎,道長会钝,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮迁酸,結(jié)果婚禮上先鱼,老公的妹妹穿的比我還像新娘。我一直安慰自己奸鬓,他們只是感情好焙畔,可當我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著串远,像睡著了一般宏多。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上澡罚,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天伸但,我揣著相機與錄音,去河邊找鬼留搔。 笑死更胖,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的隔显。 我是一名探鬼主播却妨,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼括眠!你這毒婦竟也來了彪标?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤哺窄,失蹤者是張志新(化名)和其女友劉穎捐下,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體萌业,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡坷襟,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了生年。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片婴程。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖抱婉,靈堂內(nèi)的尸體忽然破棺而出档叔,到底是詐尸還是另有隱情,我是刑警寧澤蒸绩,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布衙四,位于F島的核電站,受9級特大地震影響患亿,放射性物質(zhì)發(fā)生泄漏传蹈。R本人自食惡果不足惜押逼,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望惦界。 院中可真熱鬧挑格,春花似錦、人聲如沸沾歪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽灾搏。三九已至挫望,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間确镊,已是汗流浹背士骤。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蕾域,地道東北人拷肌。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像旨巷,于是被迫代替她去往敵國和親巨缘。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,914評論 2 355