log4j升級(jí)log4j2遇到的問題及解決方式
log4j升級(jí)log4j2的問題
一、導(dǎo)入包
<!-- log --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${slf4j.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>jcl-over-slf4j</artifactId> <version>${slf4j.version}</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.8.2</version> </dependency> <!-- 日志橋接包, 適配log4j2 --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-slf4j-impl</artifactId> <version>2.8.2</version> </dependency>
注意:可能有些包需要依賴log4j,但是升級(jí)后只有l(wèi)og4j2了,此時(shí)會(huì)報(bào)找不到類的錯(cuò),如:
Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Logger
那么如果這些包沒有使用slf4接口,而是寫死了必須依賴log4j的話,如果實(shí)在不想導(dǎo)入log4j的包,那么只能找能代替這個(gè)包的工具包使用了
如:
<!-- 使用該報(bào)去掉log4j,后會(huì)報(bào)上述錯(cuò)誤,所以就把這個(gè)包換了 --> <dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> <version>0.1</version> <exclusions> <exclusion> <artifactId>log4j</artifactId> <groupId>log4j</groupId> </exclusion> </exclusions> </dependency>
替換為如下的包,就可以了:
<dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</artifactId> <version>0.10</version> <exclusions> <exclusion> <artifactId>log4j</artifactId> <groupId>log4j</groupId> </exclusion> <exclusion> <artifactId>slf4j-log4j12</artifactId> <groupId>org.slf4j</groupId> </exclusion> </exclusions> </dependency>
二、在src/main/resources下新建一個(gè)log4j2.xml文件
配置如下
<?xml version="1.0" encoding="UTF-8" ?> <configuration status="ERROR"> <Properties> <Property name="PATTERN" value="[%d{HH:mm:ss.SSS} %-5level] [%t] %c{3} - %msg%n" /> <property name="FILE_PATH" value="/mySoft/logs" /> <property name="FILE_SIZE" value="50 MB" /> </Properties> <Appenders> <!-- 控制臺(tái)日志打印 --> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="${PATTERN}"/> </Console> <!-- 生產(chǎn)環(huán)境日志打印 --> <!-- fileName表示創(chuàng)建的日志文件名,filePattern表示如果日志策略按照日期與大小做限定的話,如果大小超過50m就會(huì)按該格式將之前的的日志文件重命名,并重新創(chuàng)建新的fileName。同理,如果日期超過限定的時(shí)間,也會(huì)進(jìn)行同樣的操作,下文定義一天建一個(gè),如果想一分鐘建一個(gè)則filePattern="${FILE_PATH}/demo-%d{yyyy-MM-dd HH-mm}-%i.log" 如此定義--> <RollingFile name="ProdFile" fileName="${FILE_PATH}/demo.log" filePattern="${FILE_PATH}/demo-%d{yyyy-MM-dd}-%i.log"> <PatternLayout pattern="${PATTERN}" /> <Policies> <TimeBasedTriggeringPolicy /> <SizeBasedTriggeringPolicy size="${FILE_SIZE}"/> </Policies> <Filters> <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY" /> </Filters> </RollingFile> </Appenders> <!-- root部分定義了log4j2的默認(rèn)輸出級(jí)別和方式 --> <loggers> <root level="error"> <appender-ref ref="Console" /> <appender-ref ref="ProdFile" /> </root> </loggers> </configuration>
升級(jí)log4j2遇到的那些坑
<slf4j.version>1.7.13</slf4j.version> <log4j2.version>2.3</log4j2.version> <disruptor.version>3.3.2</disruptor.version> <spring.version>3.2.4.RELEASE</spring.version> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>${log4j2.version}</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>${log4j2.version}</version> </dependency> <dependency> <groupId>com.lmax</groupId> <artifactId>disruptor</artifactId> <version>${disruptor.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${slf4j.version}</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-slf4j-impl</artifactId> <version>${log4j2.version}</version> </dependency>
<!--這塊比較關(guān)鍵,Spring原生應(yīng)用中需要用到commons-logging,需要把它exclude掉,另外引入jcl-over-slf4j--> <!--你會(huì)發(fā)現(xiàn)jcl-over-slf4j 只是改寫了commons-logging 去兼容Spring--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <exclusions> <exclusion> <artifactId>commons-logging</artifactId> <groupId>commons-logging</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>jcl-over-slf4j</artifactId> <version>${slf4j.version}</version> <scope>runtime</scope> </dependency> <!-- 如果代碼中依賴的jar包用到了log4j1.2.X,當(dāng)工程中將log4j1.2.X排除掉了之后,項(xiàng)目啟動(dòng)時(shí)會(huì)報(bào)錯(cuò)不成功的 --> <!-- 把下面這個(gè)jar引入進(jìn)來就OK了 --> <dependency> <groupId>org.slf4j</groupId> <artifactId>log4j-over-slf4j</artifactId> <version>${slf4j.version}</version> </dependency>
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring Cloud中FeignClient實(shí)現(xiàn)文件上傳功能
這篇文章主要為大家詳細(xì)介紹了Spring Cloud中FeignClient實(shí)現(xiàn)文件上傳功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-04-04Mybatis錯(cuò)誤引起的程序啟動(dòng)卡死問題及解決
這篇文章主要介紹了Mybatis錯(cuò)誤引起的程序啟動(dòng)卡死問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02Java中八種基本數(shù)據(jù)類型的默認(rèn)值
這篇文章主要介紹了Java中八種基本數(shù)據(jù)類型的默認(rèn)值 的相關(guān)資料,需要的朋友可以參考下2016-07-07解決springboot中自定義JavaBean返回的json對(duì)象屬性名稱大寫變小寫問題
開發(fā)過程中發(fā)現(xiàn)查詢返回的數(shù)據(jù)出現(xiàn)自定義的JavaBean的屬性值大小寫格式出現(xiàn)問題,導(dǎo)致前端無法接受到數(shù)據(jù),目前有四種解決方法,根據(jù)大佬的經(jīng)驗(yàn)之談,前兩種是最簡(jiǎn)單便捷的,后兩種是比較通用的方法,需要的朋友可以參考下2023-10-10java異常:異常處理--try-catch結(jié)構(gòu)詳解
今天小編就為大家分享一篇關(guān)于Java異常處理之try...catch...finally詳解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2021-09-09