springboot-logback 實戰(項目中極簡應用)

之前整合過logback,但是看起來花里胡哨,中看不中用,也沒有詳細介紹,今天來理一下實際項目中快速應用,根據實際場景解決問題。

第一步:創建一個極簡的springboot項目

yml只需把端口配置好能夠啟動就行

server:
  port: 8080

pom文件加入基本依賴

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>

由于springboot的spring-boot-starter幫我們自動集成了spring-boot-starter-logging的依賴,再額外加上lombok依賴,我們就可以直接使用注解@Slf4j來打日志了

@Slf4j
@SpringBootApplication
public class Main {

    public static void main(String[] args) {
        SpringApplication.run(Main.class, args);
        log.info("我可以快樂的打日志了");
    }
}

當然我們做api開發一般注解都加到controller類上面,到現在我們簡單的操作就把日志輸出到控制臺了,雖然沒有配置日志的格式控制臺也按照一定的格式輸出了,這是因為當前啟用的是logback的默認設置,那么默認設置都有哪些?首先直接啟動項目后控制臺只輸出info級別的日志,默認設置不會把日志輸出到日志文件等等,如果我們想要自定義那么先從簡單的配置開始。

第二步:yml極簡配置日志屬性
logging:
  level:
    root: info
    com:
      baidu:
        test:
          mapper: debug
  file:
    name: ./log/business_Log/bsiness.log
    max-history: 1
    max-size: 10MB
    clean-history-on-start: true
    total-size-cap: 10240
    path:
  pattern:
    rolling-file-name:
    dateformat:
    level:
    file:
    console:

我們看到logging節點下的幾個常用屬性,level、file、pattern,還有其他屬性有時間可以繼續深入研究,可以在yml里借助IDE來查看具體屬性。


image.png
這里從level開始。
image.png

1.root 可以設置日志的幾個打印級別,如果設置為info那就打印info級別以上的,像debug就不打印了,日志打印優先級可以自行百度。root可以全局控制輸出,包括控制臺輸出和文件輸出,當前設置為info那么就打印info級別以上的。

2.包名com.baidu.test.mapper 可以指定某個包的日志級別,當前為debug,那么會將該包下的日志都已debug級別以上的全部輸出。

接著file 我們可以看到對應屬性的默認值
image.png

1.path 可以填寫日志輸出文件路徑./log/business_Log,表示當前項目根路徑下business_Log文件夾,也可以不用配置,直接配置指定路徑的name屬性。
2.name 可以直接配置路徑加文件名./log/business_Log/bsiness.log,一步到位不用配置path,當該路徑不存在時,系統會默認創建。
3.max-history 默認設置的是7,也就是只保存最近7天的日志文件,那么超出7天是否清除掉日志文件,取決于clean-history-on-start: true這個屬性(因為時間原因我沒有驗證),默認設置是false,設置為true時超過7天自動清除才會自動清除(可以自己試驗一下,設置為1天,然后把項目啟動起來,隔天看看是否只保留一天的日志)
4.max-size 系統默認是按照日期切割日志的,也就是每天會切割一個日志文件然后打包備份到指定路徑的文件夾,那么此處max-size是按照文件大小10M來切割的,超過10m就會將文件打包重新生成一個日志文件繼續寫入。
5.total-size-cap 這個屬性可以計算統計輸出文件的總大小,可以約束文件占用磁盤到一定容量,比如15M,超過限定的容量15M,會自動清除較早的日志文件,讓日志時鐘占用15M左右的空間。默認值是0B。主要用來避免大量日志文件把服務器磁盤資源撐爆。

接著pattern
image.png

1.level 可以配置打印日志顯示的level 的樣式
2.file 輸出到日志文件的日志樣式
3.dateformat 日期格式
4.rolling-file-name 可以設置日志文件切割后備份的文件名格式,但是這個屬性必須把file.path的路徑./log/business_Log配置好,這樣切割后的文件后放到該路徑下,否則就放到項目根路徑下了。
5.console 可以設置控制臺輸出的日志樣式

以上通過配置yml可以實現簡單自定義配置,更多的個性化配置貌似支持不夠,比如控制臺打印彩色日志,配置多個appender,官方文檔中給出的屬性也比較有限(以下圖片不清楚能否通過配置簡單配置yml就能實現),所以需要通過配置文件來解決。
image.png
第三步:自定義配置logback-spring.xml

上一篇整合logback比較復雜,這次只需簡單配置

<?xml version="1.0" encoding="UTF-8"?>

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

    <contextName>logback</contextName>
    <!--定義日志文件的存儲地址 勿在 LogBack 的配置中使用相對路徑-->
    <property name="log.path" value="./log/business_Log" />



    <!--輸出到控制臺-->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
        <withJansi>true</withJansi>
        <encoder>
            <!--<pattern>%d %p (%file:%line\)- %m%n</pattern>-->
            <!--格式化輸出:%d:表示日期    %thread:表示線程名     %-5level:級別從左顯示5個字符寬度  %msg:日志消息    %n:是換行符-->
            <pattern>%red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger) - %cyan(%msg%n)</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!--輸出到文件-->
    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
        <file>${log.path}/logback.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/logback-%d{yyyy-MM-dd-HH-mm}.log</fileNamePattern>
            <maxHistory>365</maxHistory>
<!--            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">-->
<!--                <maxFileSize>100kB</maxFileSize>-->
<!--            </timeBasedFileNamingAndTriggeringPolicy>-->
        </rollingPolicy>
        <encoder>
            <!--格式化輸出:%d:表示日期    %thread:表示線程名     %-5level:級別從左顯示5個字符寬度  %msg:日志消息    %n:是換行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!--    如果appender里沒有限定日志級別,那么root可以統一設置,如果沒有配置那么控制臺和文件不會輸出任何日志,這里root的levvel不做限制-->
    <root >
        <!--        允許控制臺輸出-->
        <appender-ref ref="console" />
        <!--        允許文件輸出-->
        <appender-ref ref="file" />
    </root>

</configuration>

執行的效果是,每分鐘切割一下日志


image.png

控制臺輸出彩色日志


image.png

更多配置可以參考上一篇,當前項目這樣配置已經能滿足需求了,我不需要把日志按級別分類,日志量比較大的時候可以一個小時切割一次,小的話一天切割一次,之前項目按照100M來切割,當從服務器下載日志時100M還是很耗時的,所以用時間來切割比較符合我當前場景,這樣每個文件20M左右。

如果還是覺得有點大那么可以壓縮,修改以下配置

       <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/logback-%d{yyyy-MM-dd-HH-mm}.%i.log.zip</fileNamePattern>
            <maxHistory>365</maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!--文件達到 最大128MB時會被壓縮和切割 -->
                <maxFileSize>10kB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>

當前設置為每分鐘切割日志文件,如果當前文件超過10kB那么就切割成壓縮包用序號編號,到下一分鐘又從0開始編號,以下是壓縮效果


image.png
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,238評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,430評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,134評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,893評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,653評論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,136評論 1 323
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,212評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,372評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,888評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,738評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,939評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,482評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,179評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,588評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,829評論 1 283
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,610評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,916評論 2 372

推薦閱讀更多精彩內容