1. 程式人生 > >Dubbo框架升級Log4j2採坑

Dubbo框架升級Log4j2採坑

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