1. 程式人生 > >Spring Boot + Log4j2 日誌框架配置 (Maven)

Spring Boot + Log4j2 日誌框架配置 (Maven)

參考Spring Boot官方文件 日誌部分

Spring Boot預設情況下,當使用"Starters" 使用Logback輸出日誌
, 還包括適當的Logback路由, 確保其他的日誌框架(Java Util Logging, Commons Logging, Log4j, SLF4J)都能正常使用

Sping Boot文件的 26.5 Custom Log Configuration 章節,說明了自定義日誌配置方法

多樣的日誌系統可以通過

  1. 新增適當的日誌框架庫到classpath
  2. 適當的配置配置檔案加入到classpath的根目錄 或者 其他的本地目錄, 使用Spring配置 loggin.config
     配置指定配置檔案

依賴於開發者選擇的日誌框架. 這些對應的配置檔案會被載入

日誌框架 配置檔案
Logback logback-spring.xmllogback-spring.groovylogback.xmllogback.groovy
Log4j2 log4j2-spring.xmllog4j2.xml
JDK(JAVA Util Logging) logging.properties

引入Log4j2日誌框架

Log4j2為何物就不介紹了. Log4j2官網

1. Maven依賴配置

pom.xml中去掉Logback, 引入log4j2

<!-- 節選 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-log4j2 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

2. 配置檔案

2.1 log4j2.xml

使用xml格式配置檔案, 無需新增額外的依賴庫.

2.2 log4j2.yaml / log4j2.yml

使用 yaml/yml格式配置檔案. 需要額外引入依賴庫

<!-- 解析yml配置 -->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
</dependency>

<dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-yaml</artifactId>
</dependency>

2.3 log4j2.json

使用 json 格式配置檔案, 需要額外引入依賴庫

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
</dependency>

3. 修改spring boot配置

指定spring boot配置檔案

application.yaml檔案配置如下

logging:
  config: classpath:log4j2.xml

Log4j2日誌配置

如需瞭解Log4j2詳盡的配置, 可訪問官方文件

概述

大概介紹一下Log4j2的基本資訊

日誌的Level分為:

  1. trace (追蹤)
  2. debug (除錯)
  3. info (資訊)
  4. warn (警告)
  5. error (錯誤)
  6. fatal (嚴重錯誤)

這裡介紹一下博主經常使用的一種日誌方式 RollingFileAppender

以一個具體的配置為例

<?xml version="1.0" encoding="UTF-8" ?>
<Configuration status="trace" strict="true" name="LogConfig">
    <Properties>
        <Property name="filepath">/tmp/log4j2</Property>
    </Properties>
    <Appenders>
        <Console name="STDOUT" target="SYSTEM_OUT">
            <PatternLayout>
                <Pattern>[%d] - [%c] - [%highlight{%level}] - [%method] - [%t] - %msg%n</Pattern>
            </PatternLayout>
        </Console>
        <RollingFile name="logService"
                     fileName="${filepath}/logService.log"
                     filePattern="${filepath}/bak/logService-%d{yy-MM-dd HH:mm:ss}.log.gz">
            <PatternLayout>
                <Pattern>[%d] - [%c] - [%highlight{%level}] - [%method] - [%t] - %msg%n</Pattern>
            </PatternLayout>
            <Policies>
                <CronTriggeringPolicy schedule="1 * * * * ?" evaluateOnStartup="true"/>
            </Policies>
        </RollingFile>
    </Appenders>
    <Loggers>
        <Logger name="fileLogger" level="debug" additivity="false">
            <AppenderRef ref="logService"/>
            <AppenderRef ref="STDOUT"/>
        </Logger>

        <Root level="trace">
            <AppenderRef ref="STDOUT"/>
        </Root>
    </Loggers>

</Configuration>

1. Configuration 引數

  1. status: Level列舉型, 控制輸出Log4j事件資訊, 預設 error
  2. name: 配置名稱
  3. strict: 是否使用嚴格的XML格式. 推薦使用, 規範開發者的配置編寫, 不支援jsonp配置
  4. ... 其他幾個配置可以參考官方文件

2. Properties

設定配置檔案全域性的引數變數. 用於減少自定義配置資訊的重複編碼.

<Properties>
    <Property name="filepath">/tmp/log4j2</Property>
</Properties>

配置下文中, 可以使用 ${filepath} 來代替 /tmp/log4j2

3. Appenders

Log4j2提供了豐富的Appender

  1. AsyncAppender 設定appender非同步方式輸出日誌
  2. CassandraAppender 輸出至Cassandra儲存
  3. ConsoleAppender 輸出控制檯
  4. FailoverAppender 設定appender錯誤重試
  5. FileAppender 輸出至檔案
  6. FlumeAppender 輸出至Flume
  7. JDBCAppender 輸出至JDBC連線的關係型資料庫表
  8. JMS Appender 輸出至訊息服務
  9. JPAAppender 輸出至使用JPA連線的關係行資料庫
  10. HttpAppender 輸出至Http Service
  11. KafkaAppender 輸出至Kafka
  12. MemoryMappedFileAppender 輸出至記憶體
  13. NoSQLAppender 輸出至NoSQL資料庫
  14. OutputStreamAppender File/Socket型別的Appender
  15. RandomAccessFileAppender 效能是FileAppder的0.2-2倍
  16. RollingFileAppender 輸出至檔案, 檔案能按照規則打包檔案
  17. RollingRandomAccessFileAppender 同上
  18. SMTPAppender 郵件形式輸出
  19. SocketAppender socket方式傳送日誌

專案中比較常用的是 ConsoleAppender 和 RollingFileAppender.

接下來對上述的Appender配置引數的說明

<Appenders>
    <!-- ConsoleAppender -->
    <!-- name Appender名稱 -->
    <!-- target 列舉型(SYSTEM_OUT, SYSTEM_ERR). 預設 SYSTEM_OUT -->
    <Console name="STDOUT" target="SYSTEM_OUT">
        <!-- 輸出格式 詳細配置見下文 -->
        <PatternLayout>
            <Pattern>[%d] - [%c] - [%highlight{%level}] - [%method] - [%t] - %msg%n</Pattern>
        </PatternLayout>
    </Console>

    <!-- RollingFileAppender -->
    <!--  fileName 輸出的問題名稱, 使用絕對路徑確保日誌位置的正確性, 並且確保目錄有程序使用者可寫許可權  -->
    <!-- filePattern 日誌回滾的檔案命名規則 -->
    <RollingFile name="logService"
                 fileName="${filepath}/logService.log"
                 filePattern="${filepath}/bak/logService-%d{yy-MM-dd HH:mm:ss}.log.gz">
        <PatternLayout>
            <Pattern>[%d] - [%c] - [%highlight{%level}] - [%method] - [%t] - %msg%n</Pattern>
        </PatternLayout>
        <Policies>
            <!-- 按Cron定時任務回滾檔案-->
            <!-- schedule Cron表示式 -->
            <!-- evaluateOnStartup  (規則: 啟動時,檢查判斷目標檔案最後的修改時間, 如果cron規則判斷該檔案需要回滾,則直接回滾檔案.) 是否開啟該規則操作 -->
            <CronTriggeringPolicy schedule="1 * * * * ?" evaluateOnStartup="true"/>
        </Policies>
    </RollingFile>
</Appenders>

3.2 日誌輸出規則 Layouts

Layout有多種格式輸出

  1. CSV
  2. GELF
  3. HTML
  4. JSON
  5. Pattern
  6. ....

專案中一般使用Pattern 按行輸出逐條資訊, 配置如下:

<!-- 節選配置 -->
<PatternLayout>
    <Pattern>[%d] - [%c] - [%highlight{%level}] - [%method] - [%t] - %msg%n</Pattern>
</PatternLayout>

% + char/word 代表一種輸出的資訊或者格式

時間 %d / %date

格式 輸出
%d, %d{DEFAULT} 2012-11-02 14:34:02,781
%d{UNIX} 1351866842
%d{UNIX_MILLIS} 1351866842781
%d{yyyy-MM-dd HH:mm:ss,SSS} 2012-11-02 14:34:02,781

類 %c / %logger

輸出呼叫的類名

%c{number} , 控制型別的長度

等級 %level

輸出等級 TRACE, DEBUG, INFO, WARN, ERROR, FATAL

顏色格式 %highlight

%heighlight{xxx}

xxx將會帶有顏色樣式, 並且和Level相關, 一般用於debug除錯資訊使用

日誌內容 %m / %msg / %message

可新增文字樣式

換行 %n

根據作業系統的輸出不同的換行識別符號使用者日誌換行, 最好別使用 \n\r\n 等換行符號

其他還有很多識別符號號, 參考 官方文件

4. Loggers

  1. 必須包含一個 Root 元素, 不設定 Root 元素, 將會預設使用類似如下的配置
<Root level="error">
    <AppenderRef ref="Console" />
</Root>
  1. 配置其他開發者自定義的 Logger
<Loggers>
    <!-- name 必填且唯一 -->
    <!-- level 設定輸出最低級別 預設error -->
    <!-- additivity 是否在父Logger輸出, 預設 true -->
    <Logger name="fileLogger" level="debug" additivity="false">
        <!-- 上文中定義的Appender name -->
        <AppenderRef ref="logService"/>
        <AppenderRef ref="STDOUT"/>
    </Logger>

    <Root level="ERROR">
        <AppenderRef ref="STDOUT"/>
    </Root>
</Loggers>

使用Logger

以demo為例

package info.chiwm.log4j2.service;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.stereotype.Service;

/**
 * @author [email protected]
 * @ClassName: Log4j2ServiceImpl
 * @Description:
 * @date 2018/1/4 上午11:10
 */

@Service
public class Log4j2ServiceImpl implements Log4j2Service {
    // 使用LogManager獲取配置Logger
    private static Logger logger = LogManager.getLogger("fileLogger");

    @Override
    public void info(String msg) {

        // 輸出日誌
        // 特別注意 不要使用 `+` 去拼接資訊, 這樣在控制輸出級別之後, 有些日誌操作不會列印, 但是它去操作了新字串建立, 使用 `{}` 去代替 `+`
        logger.info("info {}", msg);
    }

    @Override
    public void error() {
        logger.error("error");
    }

    @Override
    public void warn() {
        logger.warn("warn");
    }

    @Override
    public void debug() {
        logger.debug("debug");
    }

    @Override
    public void trace() {
        logger.trace("trace");
    }
}

總結

前面的配置步驟,配置,使用步驟,大概描述了Log4j2的使用.

log4j2.x日誌按日期分隔

log4j2.x的日誌在效能上有很大的提升,也被標識為下一代的非同步日誌管理系統。
專案組在使用的時候,發現日誌沒有按照日期進行檔案分割。於是親自上log4j2.x的官網查看了部分文件。
按如下配置即可實現日誌按日期進行分割:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
  <Appenders>
      <!-- 配置日誌輸出檔名字     追加讀寫 -->  
    <RollingFile name="taoge" fileName="logs/taoge.log" filePattern="logs/taoge.%d{yyyy-MM-dd}.log" append="true">
        <!-- 輸出格式 -->  
        <PatternLayout pattern="[%l] [%t] [%-4r] [%d{yyyy-MM-dd HH:mm:ss,SSS}] [%p] \: %m%n"/>
        <!-- 設定策略 -->
        <Policies>  
            <!-- 基於時間的觸發策略。該策略主要是完成周期性的log檔案封存工作。有兩個引數:
                interval,integer型,指定兩次封存動作之間的時間間隔。單位:以日誌的命名精度來確定單位,
                    比如yyyy-MM-dd-HH 單位為小時,yyyy-MM-dd-HH-mm 單位為分鐘
                modulate,boolean型,說明是否對封存時間進行調製。若modulate=true,
                    則封存時間將以0點為邊界進行偏移計算。比如,modulate=true,interval=4hours,
                    那麼假設上次封存日誌的時間為03:00,則下次封存日誌的時間為04:00,
                    之後的封存時間依次為08:00,12:00,16:00
             -->
            <TimeBasedTriggeringPolicy interval="1" modulate="true" />  
        </Policies>
    </RollingFile>
      <!-- 標準輸出 -->
    <Console name="STDOUT" target="SYSTEM_OUT">
      <!-- 輸出格式 -->
      <PatternLayout pattern="[%l] [%t] [%-4r] [%d{yyyy-MM-dd HH:mm:ss,SSS}] [%p] \: %m%n"/>
    </Console>
  </Appenders>
  <Loggers>
    <!-- 配置記錄器級別 -->
    <Root level="debug">
        <AppenderRef ref="taoge"/>
          <!-- 輸出設定 -->
          <AppenderRef ref="STDOUT"/>
    </Root>
  </Loggers>
</Configuration>

--------------------- 
作者:業餘草 
來源:CSDN 
原文:https://blog.csdn.net/xmtblog/article/details/49019711?utm_source=copy 

<?xml version="1.0" encoding="UTF-8"?>  
<Configuration>  
    <Appenders>  
    <!-- 輸出到控制檯 -->  
        <Console name="CONSOLE" target="SYSTEM_OUT">  
            <!-- 輸出格式 -->  
            <PatternLayout pattern="ROOT:%d %-5p %C %L - %m%n" />  
        </Console>  
        <!-- 按天備份一個日誌 -->  
        <!-- fileName為生成的檔名,x為路徑,也可以採用相對路徑模式,filePattern為時間到達後產生新日誌,舊日誌的檔名 -->  
        <RollingFile name="TASK" fileName="x:/xxxx/logs.log"  
            filePattern="x:/xxxx/logs_%d{yyyy-MM-dd}.log" >   
            <!-- 輸出格式 -->  
            <PatternLayout pattern="%d %-5p %m%n" />  
            <Policies>  
            <!-- 每1天更新一次,此處查閱網上和官方示例中,都是以小時出現,我測試是以天為單位。(官方文件中說明按item型別是否是小時,但沒找到在哪裡設定item型別)另有其他各型別策略,請參閱官方文件 --> 
<!-- TimeBasedTriggeringPolicy需要和filePattern配套使用,由於filePattern配置的時間最小粒度是dd天,所以表示每一天新建一個檔案儲存日誌。SizeBasedTriggeringPolicy表示當檔案大小大於指定size時,生成新的檔案儲存日誌。 --> 
                <TimeBasedTriggeringPolicy modulate="true"  
                    interval="1" />  
                <!-- 此處為每個檔案大小策略限制,使用它一般會在檔案中filePattern採用%i模式 -->  
                <!-- <SizeBasedTriggeringPolicy size="128KB" /> -->  
            </Policies>  
            <!-- 最多備份30天以內的日誌,此處為策略限制,Delete中可以按自己需要用正則表示式編寫 -->  
        <!-- DefaultRolloverStrategy欄位中加入max=“30”經測試是配合SizeBasedTriggeringPolicy限制%i的存在數量,並沒有發現是網上流傳的是最多儲存多少個檔案的限制,也或許是我寫的有問題 -->  
         <DefaultRolloverStrategy>  
        <Delete basePath="x:/xxxx" maxDepth="1">  
                     <IfFileName glob="logs_*.log" />  
                     <IfLastModified age="30d" />  
            </Delete>  
            </DefaultRolloverStrategy>  
        </RollingFile>  
    </Appenders>  
    <!-- 連結到Console和RollingFile標籤實現debug以上等級的輸出 -->  
    <loggers>    
    <root level="debug">    
        <appender-ref ref="CONSOLE"/>    
        <AppenderRef ref="TASK" />  
    </root>    
    </loggers>    
</Configuration>  


Spring boot 日誌分檔基於log4j2.yaml 配置檔案

Why is Log4j2?

優化 說明
執行速度 Log4j 2.x 相對於 Log4j 1.x 和 Logback來說,具有更快的執行速度。一方面由於 重寫了內部的實現,在某些特定的場景上面,甚至可以比之前的速度快上10倍。比如內部的訊息佇列採用了ArrayBlockingQueue,相對於原始的ArrayList和鎖操作來說,管程類的訊息佇列擁有更好地效能。同時所需的記憶體更加少。這是因為Log4j 2.x 採用佔位符的形式列印日誌(類似於Slf4j門面日誌的形式),會先判斷一下日誌的等級,然後再拼接要列印的內容。另一方面由於Log4j 2.x 充分利用Java 5的併發特性(主要是使用了一些concurrent包下鎖),使得效能得到一定的改善,而Log4j 1.x和Logback很多地方還是用的重鎖。
非同步效能 Asynchronous Loggers是Log4j2新增的日誌器,非同步日誌器在其內部實現採用了LMAX Disruptor(一個無鎖的執行緒間通訊庫)技術,Disruptor主要通過環形陣列結構、元素位置定位和精巧的無鎖設計(CAS)實現了在高併發情形下的高效能。而且Log4j 2.x中Asynchronous Appenders作為Asynchronous Loggers工作的一部分,效果進行了增強。每次寫入磁碟時,都會進行flush操作,效果和配置“immediateFlush=true”一樣。該非同步Appender內部採用ArrayBlockingQueue的方式。RandomAccessFileAppender採用ByteBuffer+RandomAccessFile替代了BufferedOutputStream,官方給出的測試資料是它將速度提升了20-200%。
自動載入配置檔案 Log4j 2.x 和Logback都新增了自動載入日誌配置檔案的功能,又與Logback不同,配置發生改變時不會丟失任何日誌事件。當Log4j 2.x中配置發生改變時,如果還有日誌事件尚未處理,Log4j 2會繼續處理,當處理完成後,Logger會重新指向新配置的LoggerConfig物件,並且刪除無用的物件。
死鎖問題的解決 在Log4j 1.x中同步寫日誌的時候,在高併發情況下出現死鎖導致cpu使用率異常飆升。其中的原因是當一個程序寫日誌的時候需要獲取到Logger和Appender。org.apache.log4j.Logger類繼承於org.apache.log4j.Category、Appender繼承於org.apache.log4j.AppenderSkeleton。通過Log4j 1.x中Category原始碼和Appender原始碼可以知道,當多執行緒併發時,可能會因為相互持有Logger和Appender發生死鎖。 而在log4j 2.x中充分利用Java5的併發支援,並且以最低級別執行鎖定。

日誌由logback替換為log4j2

去除

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

引用

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>
        <!-- 加上這個才能辨認到log4j2.yml檔案 -->
        <dependency>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-yaml</artifactId>
        </dependency>

在所有專案中引用到logback的包都去除

            <exclusions>
                <exclusion>
                    <groupId>ch.qos.logback</groupId>
                    <artifactId>logback-classic</artifactId>
                </exclusion>
            </exclusions>

spring boot 預設配置檔案引數設定

  設定日誌的位置,預設是放在resource根目錄下面的

logging.config=classpath:log4j2.yml

log4j2.yml



# 共有8個級別,按照從低到高為:ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF。

Configuration:
  status: warn
  monitorInterval: 30

  Properties: # 定義全域性變數
    Property: # 預設配置(用於開發環境)。其他環境需要在VM引數中指定,如下:
      #測試:-Dlog.level.console=warn -Dlog.level.xjj=trace
      #生產:-Dlog.level.console=warn -Dlog.level.xjj=info
      - name: log.level.console
        value: info
      - name: log.path
        value: log
      - name: project.name
        value: endeavour
      - name: log.pattern
        value: "%d{yyyy-MM-dd HH:mm:ss.SSS} -%5p ${PID:-} [%15.15t] %-30.30C{1.} : %m%n"

  Appenders:
    Console:  #輸出到控制檯
      name: CONSOLE
      target: SYSTEM_OUT
      PatternLayout:
        pattern: ${log.pattern}
#   啟動日誌
    RollingFile:
      - name: ROLLING_FILE
        fileName: ${log.path}/${project.name}.log
        filePattern: "${log.path}/historyRunLog/$${date:yyyy-MM}/${project.name}-%d{yyyy-MM-dd}-%i.log.gz"
        PatternLayout:
          pattern: ${log.pattern}
        Filters:
#        一定要先去除不接受的日誌級別,然後獲取需要接受的日誌級別
          ThresholdFilter:
            - level: error
              onMatch: DENY
              onMismatch: NEUTRAL
            - level: info
              onMatch: ACCEPT
              onMismatch: DENY
        Policies:
          TimeBasedTriggeringPolicy:  # 按天分類
            modulate: true
            interval: 1
        DefaultRolloverStrategy:     # 檔案最多100個
          max: 100
#   平臺日誌
      - name: PLATFORM_ROLLING_FILE
        ignoreExceptions: false
        fileName: ${log.path}/platform/${project.name}_platform.log
        filePattern: "${log.path}/platform/$${date:yyyy-MM}/${project.name}-%d{yyyy-MM-dd}-%i.log.gz"
        PatternLayout:
          pattern: ${log.pattern}
        Policies:
          TimeBasedTriggeringPolicy:  # 按天分類
            modulate: true
            interval: 1
        DefaultRolloverStrategy:     # 檔案最多100個
          max: 100
#   業務日誌
      - name: BUSSINESS_ROLLING_FILE
        ignoreExceptions: false
        fileName: ${log.path}/bussiness/${project.name}_bussiness.log
        filePattern: "${log.path}/bussiness/$${date:yyyy-MM}/${project.name}-%d{yyyy-MM-dd}-%i.log.gz"
        PatternLayout:
          pattern: ${log.pattern}
        Policies:
          TimeBasedTriggeringPolicy:  # 按天分類
            modulate: true
            interval: 1
        DefaultRolloverStrategy:     # 檔案最多100個
          max: 100
#   錯誤日誌
      - name: EXCEPTION_ROLLING_FILE
        ignoreExceptions: false
        fileName: ${log.path}/exception/${project.name}_exception.log
        filePattern: "${log.path}/exception/$${date:yyyy-MM}/${project.name}-%d{yyyy-MM-dd}-%i.log.gz"
        ThresholdFilter:
          level: error
          onMatch: ACCEPT
          onMismatch: DENY
        PatternLayout:
          pattern: ${log.pattern}
        Policies:
          TimeBasedTriggeringPolicy:  # 按天分類
            modulate: true
            interval: 1
        DefaultRolloverStrategy:     # 檔案最多100個
          max: 100
#   DB 日誌
      - name: DB_ROLLING_FILE
        ignoreExceptions: false
        fileName: ${log.path}/db/${project.name}_db.log
        filePattern: "${log.path}/db/$${date:yyyy-MM}/${project.name}-%d{yyyy-MM-dd}-%i.log.gz"
        PatternLayout:
          pattern: ${log.pattern}
        Policies:
          TimeBasedTriggeringPolicy:  # 按天分類
            modulate: true
            interval: 1
        DefaultRolloverStrategy:     # 檔案最多100個
          max: 100


  Loggers:
    Root:
      level: info
      AppenderRef:
        - ref: CONSOLE
        - ref: ROLLING_FILE
        - ref: EXCEPTION_ROLLING_FILE
    Logger:
      - name: platform
        level: info
        additivity: false
        AppenderRef:
          - ref: CONSOLE
          - ref: PLATFORM_ROLLING_FILE

      - name: bussiness
        level: info
        additivity: false
        AppenderRef:
          - ref: BUSSINESS_ROLLING_FILE

      - name: exception
        level: debug
        additivity: true
        AppenderRef:
          - ref: EXCEPTION_ROLLING_FILE

      - name: db
        level: info
        additivity: false
        AppenderRef:
          - ref: DB_ROLLING_FILE


#    監聽具體包下面的日誌
#    Logger: # 為com.xjj包配置特殊的Log級別,方便除錯
#      - name: com.xjj
#        additivity: false
#        level: ${sys:log.level.xjj}
#        AppenderRef:
#          - ref: CONSOLE
#          - ref: ROLLING_FILE

日誌獲取工具類

package com.lck.demo.endeavour.util;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 本地日誌參考類
 *
 * @author ckli01
 * @date 2018/5/8
 */
public class LogUtils {


    /**
     * 獲取業務日誌logger
     *
     * @return
     */
    public static Logger getBussinessLogger() {
        return LoggerFactory.getLogger(LogEnum.BUSSINESS.getCategory());
    }

    /**
     * 獲取平臺日誌logger
     *
     * @return
     */
    public static Logger getPlatformLogger() {
        return LoggerFactory.getLogger(LogEnum.PLATFORM.getCategory());
    }

    /**
     * 獲取資料庫日誌logger
     *
     * @return
     */
    public static Logger getDBLogger() {
        return LoggerFactory.getLogger(LogEnum.DB.getCategory());
    }


    /**
     * 獲取異常日誌logger
     *
     * @return
     */
    public static Logger getExceptionLogger() {
        return LoggerFactory.getLogger(LogEnum.EXCEPTION.getCategory());
    }


}

列舉類:

package com.lck.demo.endeavour.util;

/**
 * 本地日誌列舉
 *
 * @author ckli01
 * @date 2018/5/8
 */
public enum  LogEnum {


    BUSSINESS("bussiness"),

    PLATFORM("platform"),

    DB("db"),

    EXCEPTION("exception"),

    ;


    private String category;


    LogEnum(String category) {
        this.category = category;
    }

    public String getCategory() {
        return category;
    }

    public void setCategory(String category) {
        this.category = category;
    }
}



作者:ClineChen
連結:https://www.jianshu.com/p/8785e9510184
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯絡作者獲得授權並註明出處。