Dubbo框架升級Log4j2採坑
阿新 • • 發佈:2018-11-09
Apache Log4j 2是Log4j的升級版,它比Log4j 1.x 版本有了很大的效能提升,吸收了LogBack的先進功能,更通過優秀的鎖機制、LMAX Disruptor、"無垃圾"機制等先進特性,在效能上全面超越了Log4j和LogBack
升級Log4j2後的專案地址:
https://github.com/ryiann/ssm-dubbo
為什麼升級Log4j2,有哪些優點?
- 日誌模板功能
- 支援非同步輸出日誌
- 略…具體請檢視官方文件
好了,本文的重點也不是介紹Log4j2的優點,本文主要記錄下Dubbo框架升級Log4j2的一些坑,所以這裡不介紹那麼多了
之前使用dubbo框架採用的是log4j日誌,自從知道了log4j2的優秀日誌模板,在寫法上有了改進,就一直念念不忘,今天花了點時間把日誌升了下級,不過也遇到了一些坑,升級後,出現log4j、log4j2衝突問題,控制檯一直出現以下WARN,一些日誌打印不出來
Zookeeper/ZkClient等預設使用log4j的元件無法列印日誌
log4j:WARN No appenders could be found for logger (org.springframework.web.context.ContextLoader).
解決
###匯入log4j2依賴
按實際情況引入橋接,如果沒有使用commons-logging日誌,就不用引入log4j-jcl
<!-- 橋接:告訴Slf4j使用Log4j2 --> <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-slf4j-impl --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-slf4j-impl</artifactId> <version>2.8.2</version> </dependency> <!-- 橋接:告訴commons-logging使用Log4j2 --> <!--<dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-jcl</artifactId> <version>2.8.2</version> </dependency>--> <!-- log4j2 api --> <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.8.2</version> </dependency> <!-- log4j2 core --> <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.8.2</version> </dependency>
排除非log4j2日誌的依賴
<!-- dubbo -->
<!-- https://mvnrepository.com/artifact/com.alibaba/dubbo -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.3</version>
<exclusions>
<exclusion>
<artifactId>spring</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.6</version>
<exclusions>
<!-- 排除log4j1的方式 -->
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
<!-- 排除logback的方式 -->
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- zkclient -->
<!-- https://mvnrepository.com/artifact/com.101tec/zkclient -->
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.10</version>
</dependency>
編譯專案、執行,飛起… Over