[kotcloud] kotlin + springboot (三)lo4j2 + slf4j配置日誌,多環境日誌

概述

  • log4j2 支持同步日誌和異步日誌 , 性能優於log4j 和logback .
  • log4j2 支持配置方式: xml , json , yaml, properties

自動發現配置文件(Automatic Configuration) , 目錄在classpath下: maven目錄 (src -> main -> resources) ,文件發現順序:

log4j2-test.properties 
 log4j2-test.yaml
 log4j2-test.yml
 log4j2-test.json
 log4j2-test.jsn
 log4j2-test.xml
 log4j2.properties
 log4j2.yaml
 log4j2.yml
 log4j2.json
 log4j2.jsn
 log4j2.xml

如果沒有配置文件 , log4j2 默認配置:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
  <Appenders>
    <Console name="Console" target="SYSTEM_OUT">
      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </Console>
  </Appenders>
  <Loggers>
    <Root level="error">
      <AppenderRef ref="Console"/>
    </Root>
  </Loggers>
</Configuration>
  • Appenders配置參考:
  1. Log4j2官方文檔翻譯、學習筆記之二——Appender的分類及常用類型示例
  2. log4j2常用Appender介紹

最好的文檔 ,還是在官網

使用log4j2.yml

Configuration:
  status: WARN
  Appenders:
  #配置控制檯輸出的格式
    Console:
      name: Console
      target: SYSTEM_OUT
      PatternLayout:
        #%d日期 %t線程 %-5level五個字符的日誌輸出級別 %logger日誌發生的位置 %m日誌內容 %n換行
        pattern: %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n

  Loggers:
    Root:
      #總輸出級別 error  , 輸出到控制檯
      level: ERROR
      AppenderRef:
        ref: Console
    Logger:
      #org.kotcloud路徑下的日誌輸出級別爲DEBUG, additivity(默認true)=false不重複輸出
      name: org.kotcloud
      level: DEBUG
      additivity: false

不要配置DTD文件

配置pom.xml

       <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>
        <!-- 引入log4j2,會引入slf4j -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>
        <!-- web項目 , 引入log4j-web -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-web</artifactId>
            <version>${log4j2.version}</version>
        </dependency>
        <!-- 使用log4j2.yml格式的配置文件,必須加這個依賴,用於識別.yml -->
        <dependency>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-yaml</artifactId>
        </dependency>

在Web應用程序中使用Log4j 2 在Java EE Web應用程序中使用Log4j或任何其他日誌框架時,您必須特別小心。當容器關閉或Web應用程序被取消部署時,對日誌>資源進行適當清理(數據庫連接關閉,文件關閉等)非常重要。由於Web應用程序中類加載器的性質,Log4j資源無法通過正常方式清理。當Web應用程序部署時必須“啓動”Log4j,並在Web應用程序未使用時“關閉”。它的工作方式取決於您的應用程序是Servlet 3.0還是更新版本或 Servlet 2.5 Web應用程序。

無論哪種情況,您都需要將log4j-web模塊添加到您的部署中,詳見 Maven,Ivy和Gradle Artifacts手冊頁。

爲了避免問題,當包含log4j-web jar時,Log4j關閉鉤子將自動被禁用。

使用log4j2,slf4j

@RestController
open class IndexController{

    val log : Logger = LoggerFactory.getLogger(IndexController::class.java)

    @RequestMapping("/index")
    fun index(id:String="") : String{
        log.info("id:{}",id)
        return id
    }
}

完成後啓動服務 , 請求接口: http://localhost:8080/index?id=123456

輸出 :

2018-04-09 12:33:34.640 [http-nio-80-exec-3] INFO  org.kotcloud.controller.IndexController - id:123456

日誌配置成功!

多環境配置日誌:

springBoot可以使用多環境的屬性配置文件 , 那麼在多環境的屬性配置文件中指定日誌文件 ,就可以區分環境了.

新增以下文件:

  • log4j2-dev.yml
  • log4j2-test.yml
  • log4j2-pro.yml

在屬性配置文件(application-{profile}.yml)中配置不同環境的日誌 application-dev.yml

logging:
  config: classpath:log4j2-dev.yml

log4j2-dev.yml , 開發環境希望輸出更多的日誌, 可以把日誌級別儘量調到最低 , 且只輸出到控制檯

Configuration:
  status: WARN
  Appenders:
  #配置控制檯輸出的格式
    Console:
      name: Console
      target: SYSTEM_OUT
      PatternLayout:
        #%d日期 %t線程 %5p五個字符的日誌輸出級別 %l日誌發生的位置 %m日誌內容 %n換行
        pattern: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%5p %t %l - %m%n"

  Loggers:
    Root:
      #總輸出級別 DEBUG, 輸出到控制檯
      level: DEBUG
      AppenderRef:
        ref: Console
    Logger:
      #org.kotcloud路徑下的日誌輸出級別爲trace, additivity(默認true)=false不重複輸出
      name: org.kotcloud
      level: TRACE
      additivity: false
      AppenderRef:
        ref: Console

log4j2-test.yml ,測試環境日誌,輸出日誌到文件,不切分日誌.

Configuration:
  status: WARN
  Properties:
    Property:
      name: pattern
      #%d日期 %t線程 %5p五個字符的日誌輸出級別 %l日誌發生的位置 %m日誌內容 %n換行
      value: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%5p %t %l - %m%n"
  Appenders:
    #配置控制檯輸出的格式
    File:
        #輸出到項目根路徑下的 logs/out.log文件
      name: fileLog 
      fileName: logs/out.log
      PatternLayout:
        pattern: ${pattern}

  Loggers:
    Root:
      #總輸出級別 error  , 輸出到控制檯
      level: ERROR
      AppenderRef:
        ref: fileLog
    Logger:
      #org.kotcloud路徑下的日誌輸出級別爲trace, additivity(默認true)=false不重複輸出
      name: org.kotcloud
      level: DEBUG
      additivity: false
      AppenderRef:
        ref: fileLog


log4j2-pro.yml 生產日誌輸出到文件 , 並日志量達到一定量切分日誌


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章