Spring Boot 使用 logback频丘、logstash、ELK 記錄日志

Spring Boot 下倒得,嘗試使用 log4j 記錄日志到 logstash立叛,在src/main/resources 目錄下添加 log4j.properties 文件進行自定義輸出日志文件,未能成功壤躲。在 application.yml 中 配置 logging path 打印日志成功了城菊,但是未能調(diào)試成功日志分文件記錄。網(wǎng)上查閱資料碉克,說是 Spring Boot 默認使用 logback 記錄日志凌唬。log4j 多次嘗試后無果,遂改為使用 logback 記錄漏麦,最終測試成功客税。

1. 關于 Spring Boot 日志文件路徑的疑惑?

同時配置了 logging.path 和 logging.file 屬性,如下配置:

logging:
    path: /var/log
    file: test.log

僅僅只會在項目根路徑下產(chǎn)生 test.log 文件撕贞,不會在指定路徑下產(chǎn)生日志文件(期望日志路徑為:logging.path + logging.file)更耻。

原因:Spring Boot 中的 logging.path 和 logging.file 這2個屬性,只需要配置其中之一即可捏膨,如果同時配置秧均,則使用 logging.file 屬性。

當配置了 loggin.path 屬性時号涯,將在該路徑下生成 spring.log 文件目胡,即:此時使用默認的日志文件名 spring.log。

當配置了 loggin.file 屬性時链快,將在指定路徑下生成指定名稱的日志文件誉己。默認為項目相對路徑,可以為 logging.file 指定絕對路徑久又。

logging: 
    path: /var/logs          # 在/var/logs目錄下生成spring.log文件
    file: /var/logs/test.log # 在/var/logs目錄下生成test.log文件

2. logback 取代 log4j的理由:

以下來在網(wǎng)絡摘抄:

Logback 和 log4j 是非常相似的巫延,如果你對 log4j 很熟悉,那對 logback 很快就會得心應手地消。下面列了 logback 相對于 log4j 的一些優(yōu)點:

    1炉峰、更快的實現(xiàn)  Logback 的內(nèi)核重寫了,在一些關鍵執(zhí)行路徑上性能提升10倍以上脉执。而且logback 不僅性能提升了疼阔,初始化內(nèi)存加載也更小了。

    2、非常充分的測試 Logback 經(jīng)過了幾年婆廊,數(shù)不清小時的測試迅细。Logback 的測試完全不同級別的。在作者的觀點淘邻,這是簡單重要的原因選擇 logback 而不是 log4j茵典。

    3、Logback-classic 非常自然實現(xiàn)了 SLF4j Logback-classic 實現(xiàn)了 SLF4j宾舅。在使用SLF4j中统阿,你都感覺不到 logback-classic。而且因為 logback-classic 非常自然地實現(xiàn)了SLF4J筹我,所以切換到 log4j 或者其他扶平,非常容易,只需要提供成另一個 jar 包就 OK蔬蕊,根本不需要去動那些通過 SLF4JAPI 實現(xiàn)的代碼结澄。

    4、非常充分的文檔岸夯,官方網(wǎng)站有兩百多頁的文檔麻献。

    5、自動重新加載配置文件囱修,當配置文件修改了赎瑰,Logback-classic能自動重新加載配置文件。掃描過程快且安全破镰,它并不需要另外創(chuàng)建一個掃描線程餐曼。這個技術充分保證了應用程序能跑得很歡在JEE環(huán)境里面。

    6鲜漩、Lilith源譬,Lilith 是 log 事件的觀察者,和 log4j 的 chainsaw 類似孕似。而 lilith 還能處理大數(shù)量的 log 數(shù)據(jù) 踩娘。

    7、謹慎的模式和非常友好的恢復喉祭,在謹慎模式下养渴,多個 FileAppender 實例跑在多個 JVM 下,能夠安全地寫道同一個日志文件泛烙。RollingFileAppender 會有些限制理卑。Logback 的FileAppender 和它的子類包括 RollingFileAppender 能夠非常友好地從 I/O 異常中恢復。

    8蔽氨、配置文件可以處理不同的情況藐唠,開發(fā)人員經(jīng)常需要判斷不同的 Logback 配置文件在不同的環(huán)境下(開發(fā)帆疟,測試,生產(chǎn))宇立。而這些配置文件僅僅只有一些很小的不同踪宠,可以通過,和來實現(xiàn),這樣一個配置文件就可以適應多個環(huán)境妈嘹。

    9柳琢、Filters(過濾器),有些時候润脸,需要診斷一個問題染厅,需要打出日志。在log4j津函,只有降低日志級別,不過這樣會打出大量的日志孤页,會影響應用性能尔苦。在 Logback,你可以繼續(xù)保持那個日志級別而除掉某種特殊情況行施,如 alice 這個用戶登錄允坚,她的日志將打在 DEBUG 級別而其他用戶可以繼續(xù)打在WARN 級別。要實現(xiàn)這個功能只需加4行XML配置蛾号〕硐睿可以參考 MDCFIlter 。
    
   10鲜结、SiftingAppender(一個非常多功能的Appender)  它可以用來分割日志文件根據(jù)任何一個給定的運行參數(shù)展运。如,SiftingAppender 能夠區(qū)別日志事件跟進用戶的 Session精刷,然后每個用戶會有一個日志文件拗胜。

   11、自動壓縮已經(jīng)打出來的 log怒允,RollingFileAppender 在產(chǎn)生新文件的時候埂软,會自動壓縮已經(jīng)打出來的日志文件。壓縮是個異步過程纫事,所以甚至對于大的日志文件勘畔,在壓縮過程中應用不會受任何影響。

   12丽惶、堆棧樹帶有包版本炫七,Logback在打出堆棧樹日志時,會帶上包的數(shù)據(jù)蚊夫。

   13诉字、自動去除舊的日志文件,通過設置 TimeBasedRollingPolicy 或者SizeAndTimeBasedFNATP 的 maxHistory 屬性,你可以控制已經(jīng)產(chǎn)生日志文件的最大數(shù)量壤圃。如果設置 maxHistory 12陵霉,那那些 log 文件超過12個月的都會被自動移除。

總之伍绳,logback 比 log4j 太優(yōu)秀了踊挠,讓我們的應用全部建立 logback 上吧 !

3. 引入 logback 到項目中

添加包依賴冲杀,Maven style:

  <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-logging</artifactId>
    </dependency>
    <dependency>
      <groupId>net.logstash.logback</groupId>
      <artifactId>logstash-logback-encoder</artifactId>
      <version>4.11</version>
    </dependency>
    <dependency>
        <groupId>net.logstash.log4j</groupId>
        <artifactId>jsonevent-layout</artifactId>
        <version>1.7</version>
    </dependency> 

4. 添加 logback.xml

添加 logback.xml 文件到 src/main/resources 目錄下效床,系統(tǒng)會自動加載讀取 logback.xml 配置。

logback.xml:

<?xml version="1.0" encoding="UTF-8"?>
<configuration  scan="true" scanPeriod="60 seconds" debug="false">
    <include resource="org/springframework/boot/logging/logback/base.xml" />
    <contextName>logback</contextName>
   <!-- 記錄文件到特定目錄 -->
   <!--  <property name="log.path" value="E:\\test\\logback.log" /> -->
   <property name="log.path" value="/Users/chang/Desktop/CHLogs/logback.log" />
   
<appender name="stash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
             <destination>192.168.220.83:9601</destination>
          <encoder class="net.logstash.logback.encoder.LogstashEncoder" />
</appender>
    
   
<!--輸出到控制臺-->
<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">
    <file>${log.path}</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>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="stash"/>
    <appender-ref ref="console" />
    <appender-ref ref="file" />
</root>

<!-- logback為 java 中的包 
<logger name="com.dudu.controller"/>
logback.LogbackDemo:類的全路徑
<logger name="com.dudu.controller.LearnController" level="WARN" additivity="false">
    <appender-ref ref="console"/>
</logger> -->
</configuration>

5. logstash-logback-encoder 版本問題

在 spring-boot 中权谁,如果使用 logstash-logback-encoder 剩檀,可能需要告訴 maven 具體的版本號以此避免包依賴沖突。例如可以像下面這樣設置 logback-core, logback-classic, and logback-access 的 dependencies:

    <properties>
        <ch.qos.logback.version>1.2.3</ch.qos.logback.version>
    </properties>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-core</artifactId>
                <version>${ch.qos.logback.version}</version>
            </dependency>
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-classic</artifactId>
                <version>${ch.qos.logback.version}</version>
            </dependency>
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-access</artifactId>
                <version>${ch.qos.logback.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

6. logstash 服務搭建

請另行谷歌百度

參考:

  1. logstash-logback-encoder
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末旺芽,一起剝皮案震驚了整個濱河市沪猴,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌采章,老刑警劉巖运嗜,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異悯舟,居然都是意外死亡担租,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門抵怎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來奋救,“玉大人,你說我怎么就攤上這事便贵〔ふ颍” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵承璃,是天一觀的道長利耍。 經(jīng)常有香客問我,道長盔粹,這世上最難降的妖魔是什么隘梨? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮舷嗡,結(jié)果婚禮上轴猎,老公的妹妹穿的比我還像新娘。我一直安慰自己进萄,他們只是感情好捻脖,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布锐峭。 她就那樣靜靜地躺著,像睡著了一般可婶。 火紅的嫁衣襯著肌膚如雪沿癞。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天矛渴,我揣著相機與錄音椎扬,去河邊找鬼。 笑死具温,一個胖子當著我的面吹牛蚕涤,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播铣猩,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼揖铜,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了达皿?” 一聲冷哼從身側(cè)響起蛮位,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎鳞绕,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體尸曼,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡们何,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了控轿。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片冤竹。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖茬射,靈堂內(nèi)的尸體忽然破棺而出鹦蠕,到底是詐尸還是另有隱情,我是刑警寧澤在抛,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布钟病,位于F島的核電站,受9級特大地震影響刚梭,放射性物質(zhì)發(fā)生泄漏肠阱。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一朴读、第九天 我趴在偏房一處隱蔽的房頂上張望屹徘。 院中可真熱鬧,春花似錦衅金、人聲如沸噪伊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鉴吹。三九已至姨伟,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間拙寡,已是汗流浹背授滓。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留肆糕,地道東北人般堆。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像诚啃,于是被迫代替她去往敵國和親淮摔。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

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