Spring Boot 日志Logback

image.png

Spring Boot 內(nèi)置包含了logback 和 slf4j荤胁,通過依賴關系可以看到岗宣,
spring-boot-starter -> spring-boot-starter-logging
spring-boot-starter-logging又依賴了 logbackslf4j

image.png

因此我們無需在pom.xml文件中引入任何依賴器腋。

日志格式

SpringBoot默認的日志輸出格式是這樣的溶其,從左到右依次是:

  • 日期時間
  • 日志級別
  • 進程號
  • 線程名稱
  • 源代碼的類名稱
  • 日志信息
2018-10-24 11:23:54.773  INFO     1529   ---[nio-8080-exec-1] com.xiaozhao.controller.HelloController  : 我是控制器管宵,接收到了參數(shù):詹姆斯
時間日期精確到毫秒          日志級別   進程id ---[線程名稱]          源代碼的類名稱                             : 業(yè)務日志

日志級別

Spring Boot 默認只輸出到控制臺前痘,日志級別只顯示INFO、WARN婆瓜、ERROR

雖然可以通過以下2種方式啟動debug日志快集,但是只會輸出系統(tǒng)相關的日志,咱們在程序中寫的debug級別日志是不能輸出的廉白。
1)在 application.properties 中設置 debug=true

  1. 使用命令行啟動: java -jar myApp.jar --debug

最簡單配置

日志默認是不輸出到文件中的个初,但是在生產(chǎn)環(huán)境下,一般需要記錄運行日志的猴蹂,我們只需在application.properties加上如下配置即可院溺。

logging.path=/Users/xiaozhao/Technology/temp/logs
logging.file=/Users/xiaozhao/Technology/temp/logs/my.log
logging.level.root=info

上面三行配置依次為:

  • 日志文件的路徑
  • 日志文件名稱
  • 日志級別

日志大小默認為10MB,超過這個大小后建立新文件磅轻。

自定義深層次配置

如果想要對日志有更精細的控制珍逸,可以添加額外的配置文件。在resources文件夾下建立對應的配置文件即可聋溜,文件名稱約定為:

  • logback.xml
  • logback-spring.xml

這2個文件的區(qū)別是加載的時機不同谆膳,logback.xml加載的比較早,因此和Spring Boot的一些互動性不如 logback-spring.xml

建議使用 logback-spring.xml即可撮躁,因為這個可以加入一些擴展配置漱病,比如和spring的profile配合,讀取application.properties中的一些屬性等把曼。

logback 擴展配置
1.與profile配合

可以使用 springProfile 標簽來選擇性的包含或者排除一些設置項杨帽。

比如我們在開發(fā)階段時,一般只要把日志輸出到控制臺即可嗤军,沒有必要輸出到文件中注盈。
而在生產(chǎn)環(huán)境中輸出到控制臺是沒有意義的,同時還有性能開銷叙赚,一般需要把日志輸出到文件老客,則取消輸出到控制臺僚饭。

例如有一個application-dev.properties的配置,用于開發(fā)環(huán)境胧砰,在我們的application.properties中有如下設置

# 啟用開發(fā)環(huán)境
spring.profiles.active=dev

然后在logback-spring.xml中加入如下節(jié)點

<!--開發(fā)環(huán)境下只輸出到控制臺浪慌,不寫日志文件-->
    <springProfile name="dev">
        <root level="INFO">
            <appender-ref ref="STDOUT"/>
        </root>
    </springProfile>

同理再加一個生產(chǎn)環(huán)境的配置節(jié)點

<!-- 生產(chǎn)環(huán)境日志級別為INFO/并且記錄日志文件 -->
    <springProfile name="prod">
        <root level="INFO">
            <appender-ref ref="FILE"/>
        </root>
    </springProfile>

還可以指定不同的輸出級別,例如在開發(fā)環(huán)境下指定輸出級別為 DEBUG 而在生產(chǎn)下為INFO

2.讀取application.properties中的配置項

可以通過 springProperty節(jié)點來讀取 application.properties中的屬性值朴则,例如我們要讀取項目名稱來作為日志文件的主名稱。

在application.properties中有這么一個配置項

spring.application.name=BangBang

然后在logback-spring.xml文件中添加一個節(jié)點

  <springProperty scope="context" name="logName" source="spring.application.name" defaultValue="bang.log"/>

 <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件輸出的文件名-->
            <FileNamePattern>${LOG_HOME}/${logName}.%d{yyyy-MM-dd}.log</FileNamePattern>
            <!--日志文件保留天數(shù)-->
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化輸出:%d表示日期钓简,%thread表示線程名乌妒,%-5level:級別從左顯示5個字符寬度%msg:日志消息,%n是換行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
        <!--日志文件最大的大小-->
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>10MB</MaxFileSize>
        </triggeringPolicy>
    </appender>

其中:

  • scope:作用域
  • name: 在logback-spring.xml文件中供其他地方引用的變量名稱
  • source: 在application.properties中定義的項
  • defaultValue: 默認值

這樣就可以把項目名稱讀取進來外邓,生成的日志文件就是項目名稱作為名稱撤蚊,運行之后的截圖:

image.png

示例

以下為一個logback-spring.xml配置的例子

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
    <!--
      說明:
      1、日志級別及文件
          日志記錄采用分級記錄损话,級別與日志文件名相對應侦啸,不同級別的日志信息記錄到不同的日志文件中
          例如:error級別記錄到log_error_xxx.log或log_error.log(該文件為當前記錄的日志文件),而log_error_xxx.log為歸檔日志丧枪,
          日志文件按日期記錄光涂,同一天內(nèi),若日志文件大小等于或大于2M拧烦,則按0忘闻、1、2...順序分別命名
          例如log-level-2013-12-21.0.log
          其它級別的日志也是如此恋博。
      2齐佳、文件路徑
          若開發(fā)、測試用债沮,在Eclipse中運行項目炼吴,則到Eclipse的安裝路徑查找logs文件夾,以相對路徑../logs疫衩。
          若部署到Tomcat下硅蹦,則在Tomcat下的logs文件中
      3、Appender
          FILEERROR對應error級別隧土,文件名以log-error-xxx.log形式命名
          FILEWARN對應warn級別提针,文件名以log-warn-xxx.log形式命名
          FILEINFO對應info級別,文件名以log-info-xxx.log形式命名
          FILEDEBUG對應debug級別曹傀,文件名以log-debug-xxx.log形式命名
          stdout將日志信息輸出到控制上辐脖,為方便開發(fā)測試使用
   -->


    <!--定義日志文件的存儲地址 勿在 LogBack 的配置中使用相對路徑-->
    <property name="LOG_HOME" value="/Users/xiaozhao/Technology/temp"/>
    <!-- 讀取 spring.application.name 屬性來生成日志文件名
        scope:作用域
        name:在 logback-spring.xml 使用的鍵
        source:application.properties 文件中的鍵
        defaultValue:默認值
    -->
    <springProperty scope="context" name="logName" source="spring.application.name" defaultValue="bang.log"/>



    <!-- 控制臺輸出 -->
    <!-- 彩色日志 -->
    <!-- 彩色日志依賴的渲染類 -->
    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
    <conversionRule conversionWord="wex"
                    converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
    <conversionRule conversionWord="wEx"
                    converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
    <!-- 彩色日志格式 -->
    <property name="CONSOLE_LOG_PATTERN"
              value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
    <!-- Console 輸出設置 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
            <charset>utf8</charset>
        </encoder>
    </appender>

    <!-- 按照每天生成日志文件 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件輸出的文件名-->
            <FileNamePattern>${LOG_HOME}/${logName}.%d{yyyy-MM-dd}.log</FileNamePattern>
            <!--日志文件保留天數(shù)-->
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化輸出:%d表示日期,%thread表示線程名皆愉,%-5level:級別從左顯示5個字符寬度%msg:日志消息嗜价,%n是換行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
        <!--日志文件最大的大小-->
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>10MB</MaxFileSize>
        </triggeringPolicy>
    </appender>

    <!--用來設置某一個包或者具體的某一個類的日志打印級別-->
    <!--打印MyBatis的sql語句-->
    <logger name="com.xiaozhao.dao" level="DEBUG"></logger>


    <!-- 日志輸出級別艇抠,生產(chǎn)環(huán)境下需要移除控制臺輸出 -->
    <!--<root level="INFO">-->
    <!--<appender-ref ref="STDOUT"/>-->
    <!--<appender-ref ref="FILE"/>-->
    <!--</root>-->

    <!--開發(fā)環(huán)境下只輸出到控制臺,不寫日志文件-->
    <springProfile name="dev">
        <root level="INFO">
            <appender-ref ref="STDOUT"/>
        </root>
    </springProfile>

    <!-- 生產(chǎn)環(huán)境日志級別為INFO/并且記錄日志文件 -->
    <springProfile name="prod">
        <root level="INFO">
            <appender-ref ref="FILE"/>
        </root>
    </springProfile>
</configuration>

完整代碼
https://github.com/xiaozhaowen/spring-boot-in-action/tree/master/springboot-logback

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末久锥,一起剝皮案震驚了整個濱河市家淤,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌瑟由,老刑警劉巖絮重,帶你破解...
    沈念sama閱讀 212,332評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異歹苦,居然都是意外死亡青伤,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,508評論 3 385
  • 文/潘曉璐 我一進店門殴瘦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來狠角,“玉大人,你說我怎么就攤上這事蚪腋》岣瑁” “怎么了?”我有些...
    開封第一講書人閱讀 157,812評論 0 348
  • 文/不壞的土叔 我叫張陵屉凯,是天一觀的道長立帖。 經(jīng)常有香客問我,道長悠砚,這世上最難降的妖魔是什么厘惦? 我笑而不...
    開封第一講書人閱讀 56,607評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮哩簿,結(jié)果婚禮上宵蕉,老公的妹妹穿的比我還像新娘。我一直安慰自己节榜,他們只是感情好羡玛,可當我...
    茶點故事閱讀 65,728評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著宗苍,像睡著了一般稼稿。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上讳窟,一...
    開封第一講書人閱讀 49,919評論 1 290
  • 那天让歼,我揣著相機與錄音,去河邊找鬼丽啡。 笑死谋右,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的补箍。 我是一名探鬼主播改执,決...
    沈念sama閱讀 39,071評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼啸蜜,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了辈挂?” 一聲冷哼從身側(cè)響起衬横,我...
    開封第一講書人閱讀 37,802評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎终蒂,沒想到半個月后蜂林,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,256評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡拇泣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,576評論 2 327
  • 正文 我和宋清朗相戀三年悉尾,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片挫酿。...
    茶點故事閱讀 38,712評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖愕难,靈堂內(nèi)的尸體忽然破棺而出早龟,到底是詐尸還是另有隱情,我是刑警寧澤猫缭,帶...
    沈念sama閱讀 34,389評論 4 332
  • 正文 年R本政府宣布葱弟,位于F島的核電站,受9級特大地震影響猜丹,放射性物質(zhì)發(fā)生泄漏芝加。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,032評論 3 316
  • 文/蒙蒙 一射窒、第九天 我趴在偏房一處隱蔽的房頂上張望藏杖。 院中可真熱鬧,春花似錦脉顿、人聲如沸蝌麸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽来吩。三九已至,卻和暖如春蔽莱,著一層夾襖步出監(jiān)牢的瞬間弟疆,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,026評論 1 266
  • 我被黑心中介騙來泰國打工盗冷, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留怠苔,地道東北人。 一個月前我還...
    沈念sama閱讀 46,473評論 2 360
  • 正文 我出身青樓仪糖,卻偏偏與公主長得像嘀略,于是被迫代替她去往敵國和親恤溶。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,606評論 2 350

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

  • 東行西走南北游帜羊,笑語攜春為何求咒程,一念慈心執(zhí)天意,天馬行空合大猷讼育。 原創(chuàng)作品 (Original Article)
    一詩一境界閱讀 140評論 0 0
  • 許多念念不忘 根本不會有回響 01 有時候奶段,太愛一個人饥瓷,就在一開始就輸了。你拼命付出痹籍,Ta理所當然呢铆。后來,你還想拼...
    萱小蕾閱讀 446評論 0 2
  • 先看《晉書·惠帝紀》里的一小段: 及天下荒亂蹲缠,百姓餓死棺克,帝曰:“何不食肉糜?” 晉惠帝時线定,鬧饑荒娜谊,百姓沒飯吃,...
    潘家文閱讀 672評論 1 4