Java Springboot logback.xml配置文件詳解

  • 依賴(lài)
<!-- springboot 的springboot-core已經(jīng)依賴(lài)了logback-core和logback-classic -->
<dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.25</version>
</dependency>
<dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>log4j-over-slf4j</artifactId>
            <version>1.7.25</version>
</dependency>
  • Spring Boot應(yīng)用將自動(dòng)使用logback作為應(yīng)用日志框架颤陶,Spring Boot啟動(dòng)的時(shí)候颗管,由org.springframework.boot.logging.Logging-Application-Listener根據(jù)情況初始化并使用。

  • 日志級(jí)別
    從低到高分為T(mén)RACE < DEBUG < INFO < WARN < ERROR < FATAL滓走,如果設(shè)置為WARN垦江,則低于WARN的信息都不會(huì)輸出。

  • 自定義日志配置
    由于日志服務(wù)一般都在ApplicationContext創(chuàng)建前就初始化了搅方,它并不是必須通過(guò)Spring的配置文件控制疫粥。因此通過(guò)系統(tǒng)屬性和傳統(tǒng)的Spring Boot外部配置文件依然可以很好的支持日志控制和管理。
    根據(jù)不同的日志系統(tǒng)腰懂,你可以按如下規(guī)則組織配置文件名梗逮,就能被正確加載:

    日志框架 配置文件名
    Logback logback-spring.xml, logback-spring.groovy, logback.xml, logback.groovy
    Log4j log4j-spring.properties, log4j-spring.xml, log4j.properties, log4j.xml
    Log4j2 log4j2-spring.xml, log4j2.xml
    JDK (Java Util Logging) logging.properties
  • Spring Boot官方推薦優(yōu)先使用帶有-spring的文件名作為你的日志配置(如使用logback-spring.xml,而不是logback.xml)绣溜,命名為logback-spring.xml的日志配置文件慷彤,spring boot可以為它添加一些spring boot特有的配置項(xiàng)(下面會(huì)提到)。
    上面是默認(rèn)的命名規(guī)則怖喻,并且放在src/main/resources下面即可底哗。如果你即想完全掌控日志配置,但又不想用logback.xml作為L(zhǎng)ogback配置的名字锚沸,可以在application.properties配置文件里面通過(guò)logging.config屬性指定自定義的名字:logging.config=classpath:logback.xml

  • logback.xml 示例

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>
<configuration  scan="true" scanPeriod="60 seconds" debug="false">
    <contextName>logback</contextName>
    <property name="log.path" value="log" />
    <!--輸出到控制臺(tái)-->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
       <!-- <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>ERROR</level>
        </filter>-->
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <!--輸出到文件-->
    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/logback.%d{yyyy-MM-dd}.log</fileNamePattern>
        </rollingPolicy>
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <root level="info">
        <appender-ref ref="console" />
        <appender-ref ref="file" />
    </root>

    <!-- logback為java中的包 -->
    <logger name="com.mico.emptyspringboot.controller"/>
    <!--logback.LogbackDemo:類(lèi)的全路徑 -->
    <logger name="com.mico.emptyspringboot.controller.UserController" level="WARN" additivity="false">
        <appender-ref ref="console"/>
    </logger>
</configuration>
  • 根節(jié)點(diǎn)<configuration>包含的屬性

    • scan:當(dāng)此屬性設(shè)置為true時(shí)跋选,配置文件如果發(fā)生改變,將會(huì)被重新加載哗蜈,默認(rèn)值為true前标。

    • scanPeriod:設(shè)置監(jiān)測(cè)配置文件是否有修改的時(shí)間間隔坠韩,如果沒(méi)有給出時(shí)間單位,默認(rèn)單位是毫秒炼列。當(dāng)scan為true時(shí)只搁,此屬性生效。默認(rèn)的時(shí)間間隔為1分鐘俭尖。

    • debug:當(dāng)此屬性設(shè)置為true時(shí)氢惋,將打印出logback內(nèi)部日志信息,實(shí)時(shí)查看logback運(yùn)行狀態(tài)稽犁。默認(rèn)值為false焰望。

  • 根節(jié)點(diǎn)<configuration>的子節(jié)點(diǎn):<configuration>下面一共有2個(gè)屬性,3個(gè)子節(jié)點(diǎn)已亥,分別是:

    • 設(shè)置上下文名稱(chēng)<contextName>

      每個(gè)logger都關(guān)聯(lián)到logger上下文柿估,默認(rèn)上下文名稱(chēng)為“default”。但可以使用設(shè)置成其他名字陷猫,用于區(qū)分不同應(yīng)用程序的記錄秫舌。一旦設(shè)置,不能修改,可以通過(guò)%contextName來(lái)打印日志上下文名稱(chēng)绣檬。<contextName>logback</contextName>

    • 設(shè)置變量<property> 用來(lái)定義變量值的標(biāo)簽足陨,有兩個(gè)屬性,name和value娇未;其中name的值是變量的名稱(chēng)墨缘,value的值時(shí)變量定義的值。通過(guò)定義的值會(huì)被插入到logger上下文中零抬。定義變量后镊讼,可以使“${}”來(lái)使用變量。<property name="log.path" value="log" />

    • 子節(jié)點(diǎn)<appender>

      appender用來(lái)格式化日志輸出節(jié)點(diǎn)平夜,有倆個(gè)屬性name和class蝶棋,class用來(lái)指定哪種輸出策略,常用就是控制臺(tái)輸出策略和文件輸出策略忽妒。
      控制臺(tái)輸出ConsoleAppender:

      <!--輸出到控制臺(tái)-->
      <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
          <level>ERROR</level>
        </filter>
         <encoder>
          <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
         </encoder>
      </appender>
      
      • <encoder>表示對(duì)日志進(jìn)行編碼:
        • %d{HH: mm:ss.SSS}——日志輸出時(shí)間玩裙。
        • %thread——輸出日志的進(jìn)程名字,這在Web應(yīng)用以及異步任務(wù)處理中很有用段直。
        • %-5level——日志級(jí)別吃溅,并且使用5個(gè)字符靠左對(duì)齊。
        • %logger{36}——日志輸出者的名字鸯檬。
        • %msg——日志消息决侈。
        • %n——平臺(tái)的換行符。

      ThresholdFilter為系統(tǒng)定義的攔截器喧务,例如我們用ThresholdFilter來(lái)過(guò)濾掉ERROR級(jí)別以下的日志不輸出到文件中赖歌。如果不用記得注釋掉枉圃,不然你控制臺(tái)會(huì)發(fā)現(xiàn)沒(méi)日志

      • 輸出到文件RollingFileAppender:
        另一種常見(jiàn)的日志輸出到文件,隨著應(yīng)用的運(yùn)行時(shí)間越來(lái)越長(zhǎng)俏站,日志也會(huì)增長(zhǎng)的越來(lái)越多,將他們輸出到同一個(gè)文件并非一個(gè)好辦法痊土。RollingFileAppender用于切分文件日志:
      <!--輸出到文件-->
      <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
       <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
         <fileNamePattern>${log.path}/logback.%d{yyyy-MM-dd}.log</fileNamePattern>
         <maxHistory>30</maxHistory>
         <totalSizeCap>1GB</totalSizeCap>
       </rollingPolicy>
       <encoder>
         <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
       </encoder>
      </appender>
      
      • 其中重要的是rollingPolicy的定義:

        • <fileNamePattern>${log.path}/logback.%d{yyyy-MM-dd}.log</fileNamePattern>定義了日志的切分方式——把每一天的日志歸檔到一個(gè)文件中肄扎;

        • <maxHistory>30</maxHistory>表示只保留最近30天的日志,以防止日志填滿整個(gè)磁盤(pán)空間赁酝。同理犯祠,可以使用%d{yyyy-MM-dd_HH-mm}來(lái)定義精確到分的日志切分方式;

        • <totalSizeCap>1GB</totalSizeCap>用來(lái)指定日志文件的上限大小酌呆,例如設(shè)置為1GB的話衡载,那么到了這個(gè)值,就會(huì)刪除舊的日志隙袁。

        • logback 每天生成和大小生成沖突的問(wèn)題可以看這個(gè)解答痰娱。

    • 子節(jié)點(diǎn)<root>
      root節(jié)點(diǎn)是必選節(jié)點(diǎn),用來(lái)指定最基礎(chǔ)的日志輸出級(jí)別菩收,只有一個(gè)level屬性梨睁,用來(lái)設(shè)置打印級(jí)別,大小寫(xiě)無(wú)關(guān):TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF娜饵,不能設(shè)置為INHERITED或者同義詞NULL坡贺。默認(rèn)是DEBUG∠湮瑁可以包含零個(gè)或多個(gè)元素遍坟,標(biāo)識(shí)這個(gè)appender將會(huì)添加到這個(gè)logger。

    <root level="debug">
       <appender-ref ref="console" />
       <appender-ref ref="file" />
    </root>
    
    • 子節(jié)點(diǎn)<logger>

      <logger>用來(lái)設(shè)置某一個(gè)包或者具體的某一個(gè)類(lèi)的日志打印級(jí)別晴股、以及指定<appender>愿伴。<logger>僅有一個(gè)name屬性,一個(gè)可選的level和一個(gè)可選的addtivity屬性电湘。

      • name:用來(lái)指定受此logger約束的某一個(gè)包或者具體的某一個(gè)類(lèi)公般。

      • level:用來(lái)設(shè)置打印級(jí)別,大小寫(xiě)無(wú)關(guān):TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF胡桨,還有一個(gè)特俗值INHERITED或者同義詞NULL官帘,代表強(qiáng)制執(zhí)行上級(jí)的級(jí)別。如果未設(shè)置此屬性昧谊,那么當(dāng)前l(fā)ogger將會(huì)繼承上級(jí)的級(jí)別刽虹。

      • addtivity:是否向上級(jí)logger傳遞打印信息呢诬。默認(rèn)是true涌哲。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末胖缤,一起剝皮案震驚了整個(gè)濱河市涡真,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖萄喳,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件份企,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡巡莹,警方通過(guò)查閱死者的電腦和手機(jī)司志,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)降宅,“玉大人骂远,你說(shuō)我怎么就攤上這事⊙” “怎么了激才?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我瘸恼,道長(zhǎng)劣挫,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任东帅,我火速辦了婚禮压固,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘靠闭。我一直安慰自己帐我,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布阎毅。 她就那樣靜靜地躺著焚刚,像睡著了一般点弯。 火紅的嫁衣襯著肌膚如雪扇调。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,554評(píng)論 1 305
  • 那天抢肛,我揣著相機(jī)與錄音狼钮,去河邊找鬼。 笑死捡絮,一個(gè)胖子當(dāng)著我的面吹牛熬芜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播福稳,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼涎拉,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了的圆?” 一聲冷哼從身側(cè)響起鼓拧,我...
    開(kāi)封第一講書(shū)人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎越妈,沒(méi)想到半個(gè)月后季俩,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡梅掠,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年酌住,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片阎抒。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡酪我,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出且叁,到底是詐尸還是另有隱情祭示,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站质涛,受9級(jí)特大地震影響稠歉,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜汇陆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一怒炸、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧毡代,春花似錦阅羹、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至酪耕,卻和暖如春导梆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背迂烁。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工看尼, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人盟步。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓藏斩,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親却盘。 傳聞我的和親對(duì)象是個(gè)殘疾皇子狰域,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

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