【原】logback實現按業務輸出到對應日誌文件

 最近負責的項目,需要新對接一個第三方api,在對接編碼過程中肯定少不了日誌的輸出,避免上了生產環境出問題排查困難, 由於這個項目已經在線上運作了有2-3年了,各種業務、非業務、框架燈日誌都集中在一個文件,並且查看了下生產環境的最近幾個日誌文件,發現一天的日誌接近2個G,如果需要查看新對接的第三方api業務日誌,比較麻煩。因此希望可以把這些和第三方對接的日誌生成在另外一個單獨的文件。這也就是標題中的實現按業務輸出日誌到不同的文件,下面開始講解具體的實現方案。

一、方案

    由於需要按業務生成不同的日誌文件,看到按業務來區分,我的第一感覺就是業務其實是可以按包名來區分的。所以其實我們只要實現不同的包下面的日誌輸出到不同的文件,就能實現需求了。由於本人以前玩過log4j2,要實現這個還是不難的,所以馬上就有思路了。
具體的實現思路如下:
    (1)自定義一個輸出到文件的appender(理解爲日誌輸出器)
    (2)配置logger,logger的name爲需要單獨生成文件的那個包的全包名,然後在裏面引用上面定義的appender

二、具體實現

(1)準備階段

    由於項目採用SpringBoot框架,而且使用的是默認日誌框架logback。看了下官網,只需要在resources下面定義一個logback-spring.xml的XML文件就能覆蓋默認的logback配置。
    由於SpringBoot默認的日誌配置還是挺不錯的,因此想把默認的配置保留下來。通過查看springboot的jar包才找到默認的logback的xml配置。
它的位置爲spring-boot-2.1.0.RELEASE.jar!\org\springframework\boot\logging\logback\base.xml,這個默認xml中有如下配置:
 
 定義了2個appender,分別爲輸出到控制檯的appender和輸出到文件的appender
 <appender name="ztripLogAppender"
            class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${LOG_DIR}/ztrip.log</file>
    <rollingPolicy
            class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <fileNamePattern>${LOG_DIR}/ztrip.%d{yyyy-MM-dd}.log.bak
      </fileNamePattern>
    </rollingPolicy>
    <encoder>
      <pattern>${COMMON_LOG_PATTERN}</pattern>
    </encoder>
  </appender>

 

<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>
        <!--[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%t] %-5level %logger{50} - %msg%n-->
        ${COMMON_LOG_PATTERN}
      </pattern>
      <charset>UTF-8</charset>
    </encoder>
  </appender>
 默認日誌級別爲info,默認引用了上面定義的這個2個appender
<logger name="ztripLog" additivity="false" level="INFO">
    <appender-ref ref="ztripLogAppender"/>
    <appender-ref ref="CONSOLE"/>
  </logger>

 

(2)代碼引用

通過lombok提供的註解,指定上面配置好的logger name
@Slf4j(topic = "ztripLog")
通過LoggerFactory去創建
private final static Logger ztripLogger = LoggerFactory.getLogger(ZtripConstants.ZTRIP_LOG_NAME);

 

(3)效果如下

 

三、最後

    (1)需要考慮到你的線上代碼已經運行了一段時間,那麼改動日誌儘量不要去動原來的,最好新增一個配置;因爲你不清楚之前的開發到底是不是還有其他邏輯在上面,盲目的改動有風險
    (2)通過不同業務的日誌分離,既能解耦也能加快排查問題的速度,避免在大日誌文件海選
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章