log4j升级log4j2遇到的问题及解决方式
程序员文章站
2022-03-05 16:14:48
目录log4j升级log4j2的问题一、导入包二、在src/main/resources下新建一个log4j2.xml文件升级log4j2遇到的那些坑log4j升级log4j2的问题一、导入包 <...
log4j升级log4j2的问题
一、导入包
<!-- 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,但是升级后只有log4j2了,此时会报找不到类的错,如:
caused by: java.lang.classnotfoundexception: org.apache.log4j.logger
那么如果这些包没有使用slf4接口,而是写死了必须依赖log4j的话,如果实在不想导入log4j的包,那么只能找能代替这个包的工具包使用了
如:
<!-- 使用该报去掉log4j,后会报上述错误,所以就把这个包换了 --> <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下新建一个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> <!-- 控制台日志打印 --> <console name="console" target="system_out"> <patternlayout pattern="${pattern}"/> </console> <!-- 生产环境日志打印 --> <!-- filename表示创建的日志文件名,filepattern表示如果日志策略按照日期与大小做限定的话,如果大小超过50m就会按该格式将之前的的日志文件重命名,并重新创建新的filename。同理,如果日期超过限定的时间,也会进行同样的操作,下文定义一天建一个,如果想一分钟建一个则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的默认输出级别和方式 --> <loggers> <root level="error"> <appender-ref ref="console" /> <appender-ref ref="prodfile" /> </root> </loggers> </configuration>
升级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>
<!--这块比较关键,spring原生应用中需要用到commons-logging,需要把它exclude掉,另外引入jcl-over-slf4j--> <!--你会发现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,当工程中将log4j1.2.x排除掉了之后,项目启动时会报错不成功的 --> <!-- 把下面这个jar引入进来就ok了 --> <dependency> <groupid>org.slf4j</groupid> <artifactid>log4j-over-slf4j</artifactid> <version>${slf4j.version}</version> </dependency>
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。
上一篇: C# 程序通用结构
推荐阅读
-
微信小程序 swiper 组件遇到的问题及解决方法
-
兼容iOS 10 升级xcode8出现的问题及一些适配问题的解决方案
-
python中使用ctypes调用so传参设置遇到的问题及解决方法
-
从.NET CORE2.2升级到3.0过程及遇到的一些问题
-
微信小程序 swiper 组件遇到的问题及解决方法
-
兼容iOS 10 升级xcode8出现的问题及一些适配问题的解决方案
-
python中使用ctypes调用so传参设置遇到的问题及解决方法
-
android开发环境遇到adt无法启动的问题分析及解决方法
-
android studio 3.0 升级 项目遇到的问题及更改思路(问题小结)
-
使用 Eclipse 给 APK 签名遇到的问题及解决方法