學(xué)習(xí)筆記:springboot項目配置logback日志系統(tǒng)

記錄springboot項目配置logback日志文件管理:

logback依賴jar包

SpringBoot項目配置logback理論上需要添加logback-classic依賴jar包:

<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.2.3</version>
</dependency>

但是因?yàn)?code>SpringBoot項目默認(rèn)就是使用的就是logback日志系統(tǒng),創(chuàng)建SpringBoot項目時引入的spring-boot-starter或者spring-boot-starter-web依賴jar包中已經(jīng)包含了spring-boot-starter-logging的依賴,里面同時包含多種日志系統(tǒng)依賴,如下圖所示:

包括logback和log4j良狈,所以炼邀,無需額外添加依賴趁仙,直接配置logback.xml就可以了桶癣。

此外表箭,如果需要切換為log4j2厦章,那么需要在spring-boot-starter-web依賴中排除springboot自帶的commons‐logging镇匀,然后在引入log4j2的依賴jar包,如下所示:

<!--排除 commons‐logging-->
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
   <exclusions>
      <exclusion>
      <groupId>commons‐logging</groupId>
      <artifactId>commons‐logging</artifactId>
      </exclusion>
   </exclusions>
</dependency>

<!--引入log4j2 -->
<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

logback的默認(rèn)配置

前面說到SpringBoot項目默認(rèn)使用logback袜啃,那么對于logback的配置情況汗侵,SpringBoot又是如何定義的呢?

首先群发,SpringBoot會從resource包下查找logback-test.xmllogback.xml 晰韵,如果這兩個都不存在,則會調(diào)用BasicConfigurator熟妓,創(chuàng)建一個最小化的基本配置雪猪。

最小化配置由一個關(guān)聯(lián)到根loggerConsoleAppender組成,默認(rèn)輸出模式為%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n起愈,root logger級別為DEBUG只恨,所以并不會生成日志文件,只會輸出到控制臺抬虽。

創(chuàng)建logback.xml配置文件

通過自定義logback.xml配置文件來控制日志輸出情況官觅,通常我們會配置三個日志組件:

  1. 控制臺輸出
  2. 輸出info級別日志文件
  3. 輸出error級別日志文件

以下為logback.xml完整配置

<!-- Logback configuration. See http://logback.qos.ch/manual/index.html -->
<configuration scan="true" scanPeriod="2 seconds">
    <!--定義日志文件的存儲地址-->
    <property name="LOG_PATH" value="./logs" />
    <!-- 控制臺輸出 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化輸出:%d表示日期,%-5level:級別從左顯示5個字符寬度斥赋,%t表示線程名缰猴,%msg:日志消息,%n是換行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level ${PID:-} --- [%t] %logger{50} - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- info級別日志文件輸出 -->
    <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 日志文件輸出的文件名 -->
        <File>${LOG_PATH}/info.log</File>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- 每日生成日志文件或日志文件大小超出限制后輸出的文件名模板 -->
            <fileNamePattern>${LOG_PATH}/info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <!-- 日志文件保留天數(shù) -->
            <maxHistory>30</maxHistory>
            <!-- 日志文件最大大邪探!:100MB -->
            <maxFileSize>100MB</maxFileSize>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level ${PID:-} --- [%t] %logger{50} - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- error級別日志文件輸出 -->
    <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 日志輸出級別,優(yōu)先級 > '<root level>' -->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>ERROR</level>
        </filter>
        <File>${LOG_PATH}/error.log</File>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <maxHistory>30</maxHistory>
            <maxFileSize>100MB</maxFileSize>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level ${PID:-} --- [%t] %logger{50} - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- 默認(rèn)日志輸出級別 -->
    <root level="INFO">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="INFO_FILE" />
        <appender-ref ref="ERROR_FILE" />
    </root>

</configuration>

logback配置說明

根節(jié)點(diǎn)configuration

<configuration scan="true" scanPeriod="2 seconds" debug="false">

</configuration>

configuration包含以下三個屬性:

  • scan:配置文件發(fā)生更改時闷堡,進(jìn)行重載隘膘,默認(rèn)值為true
  • scanPeriod:監(jiān)測配置文件是否有修改的時間間隔,默認(rèn)值為6000杠览,默認(rèn)單位為毫秒
  • debug:打印logback內(nèi)部日志信息弯菊,實(shí)時查看logback運(yùn)行狀態(tài),默認(rèn)值為false

子節(jié)點(diǎn)property:

<property name="LOG_PATH" value="./logs" />

用來定義變量值踱阿,包含以下兩個屬性

  • name:變量名稱
  • value:變量定義的值

通過property定義的值會被插入到logger上下文中管钳,可以使${}來使用變量钦铁,這里定義了log的保存位置根目錄。

子節(jié)點(diǎn)appender:

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">

</appender>

是負(fù)責(zé)寫日志的組件才漆,通過自定義日志組件控制日志輸出的情況牛曹,包含以下兩個屬性:

  • name:組件名稱
  • class:組件class指定的類名

不同的class,對應(yīng)不同的功能:

ch.qos.logback.core.ConsoleAppender會把日志輸出到控制臺

ch.qos.logback.core.rolling.RollingFileAppender把日志內(nèi)容輸出到指定文件

File節(jié)點(diǎn):日志文件輸出的文件名

<File>${LOG_PATH}/info.log</File>

filter節(jié)點(diǎn):過濾器醇滥,用來指定日志組件的日志輸出級別黎比,優(yōu)先級高于root節(jié)點(diǎn)的level。

<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
    <level>ERROR</level>
</filter>

rollingPolicy節(jié)點(diǎn):

滾動日志文件配置鸳玩,涉及日志文件的移動和重命名阅虫,只有一個class屬性,用來指定滾動策略不跟,這里使用的是ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy

包含以下三個屬性:

  • fileNamePattern:發(fā)生滾動時的日志命名方式
  • maxHistory:日志文件的最大保留時間颓帝,超過設(shè)定時間后會自動刪除
  • maxFileSize:每份日志文件的最大限制,超出限制后會重新生成窝革,并將舊的日志文件按照fileNamePattern設(shè)定的日志命名方式進(jìn)行命名
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
    <fileNamePattern>${LOG_PATH}/error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
    <maxHistory>30</maxHistory>
    <maxFileSize>100MB</maxFileSize>
</rollingPolicy>

子節(jié)點(diǎn)encoder

<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
     <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level ${PID:-} --- [%t] %logger{50} - %msg%n</pattern>
</encoder>

對記錄事件進(jìn)行格式化躲履,負(fù)責(zé)兩件事,一是把日志信息轉(zhuǎn)換成字節(jié)數(shù)組聊闯,二是把字節(jié)數(shù)組寫入到輸出流工猜。
PatternLayoutEncoder 是唯一有用的且默認(rèn)的encoder ,有一個<pattern style="margin: 0px; padding: 0px;">節(jié)點(diǎn)菱蔬,用來設(shè)置日志的輸入格式篷帅。使用“%”加“轉(zhuǎn)換符”方式,如果要輸出“%”拴泌,則必須用“\”對“%”進(jìn)行轉(zhuǎn)義魏身。</pattern>

子節(jié)點(diǎn)root

loger,是所有loger的最上級蚪腐,且只有一個level節(jié)點(diǎn)箭昵,用類設(shè)置打印日志的級別,默認(rèn)值為debug回季,通常設(shè)置為info家制,此外還有trace、warn泡一、error颤殴、all、off級別鼻忠。
子節(jié)點(diǎn)appender-ref的ref屬性指定日志組件名稱涵但,即appendername屬性值。

使用logback

yml文件中增加logging.config指定配置文件地址,命名為logback時可以不需要配置矮瘟,SpringBoot`會自動查找瞳脓。

level設(shè)置指定路徑下的日志輸出級別。

logging:
  config: classpath:logback.xml
  level:
    com:
      springboot: debug

如圖所示澈侠,項目啟動后劫侧,訪問接口輸出日志內(nèi)容并生成指定日志文件:


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市埋涧,隨后出現(xiàn)的幾起案子板辽,更是在濱河造成了極大的恐慌,老刑警劉巖棘催,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件劲弦,死亡現(xiàn)場離奇詭異,居然都是意外死亡醇坝,警方通過查閱死者的電腦和手機(jī)邑跪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來呼猪,“玉大人画畅,你說我怎么就攤上這事∷尉啵” “怎么了轴踱?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長谚赎。 經(jīng)常有香客問我淫僻,道長,這世上最難降的妖魔是什么壶唤? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任雳灵,我火速辦了婚禮,結(jié)果婚禮上闸盔,老公的妹妹穿的比我還像新娘悯辙。我一直安慰自己,他們只是感情好迎吵,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布躲撰。 她就那樣靜靜地躺著,像睡著了一般钓觉。 火紅的嫁衣襯著肌膚如雪茴肥。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天荡灾,我揣著相機(jī)與錄音,去河邊找鬼。 笑死批幌,一個胖子當(dāng)著我的面吹牛础锐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播荧缘,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼皆警,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了截粗?” 一聲冷哼從身側(cè)響起信姓,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎绸罗,沒想到半個月后意推,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡珊蟀,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年菊值,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片育灸。...
    茶點(diǎn)故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡腻窒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出磅崭,到底是詐尸還是另有隱情儿子,我是刑警寧澤,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布砸喻,位于F島的核電站柔逼,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏恩够。R本人自食惡果不足惜卒落,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蜂桶。 院中可真熱鬧儡毕,春花似錦、人聲如沸扑媚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽疆股。三九已至费坊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間旬痹,已是汗流浹背附井。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工讨越, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人永毅。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓把跨,卻偏偏與公主長得像,于是被迫代替她去往敵國和親沼死。 傳聞我的和親對象是個殘疾皇子着逐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評論 2 361

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