概述
- 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配置參考:
- patternlayout 配置參考: Log4j輸出格式控制--log4j的PatternLayout參數含義以及詳細配置
最好的文檔 ,還是在官網
使用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 生產日誌輸出到文件 , 並日志量達到一定量切分日誌