日记 - log4j版本冲突问题的解决方案

环境:win7 idea13.1.1 tomcat6 jdk6
架构:springMVC+maven+hibernate

[b]本文为日记,不推荐新手初学,只记录一些工作中遇到的解决方案[/b]
在用maven加入log4j时出现问题。
以下为我在maven里的加入的log4j的依赖
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.2</version>
</dependency>
问题首先出现在maven进行build的时候报出的错误。我为保证程序运行写的测试,maven进行build的时候大量出错,错误提示都来自这个类org.slf4j.spi.LocationAwareLogger.log
经过查询了解,该错误为运行时报错,缺少某些包的支持,加入下列支持时,maven进行编译时不再报错
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>1.7.2</version>
<type>jar</type>
<scope>runtime</scope>
</dependency>

但随后在启动tomcat时因加载报错而无法开启服务。错误如下:
严重: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
java.lang.AbstractMethodError: org.slf4j.impl.JDK14LoggerAdapter.log(Lorg/slf4j/Marker;Ljava/lang/String;ILjava/lang/String;[Ljava/lang/Object;Ljava/lang/Throwable;)V

各方求解,被告知版本冲突导致,因此走了不少弯路,耗费不少时间。
在消耗的时间里发现:
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>

<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
它们内部都有
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
这么个包,原以为是这两个相同的包与log4j发生冲突,实际上,它们温驯可爱,人畜无害。

正解是... ...!!
缺少了下列依赖
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-jdk14</artifactId>
<version>1.7.5</version>
</dependency>
添加上这个依赖,一切问题就都OK了


本文在此也附上一些log4j的使用,学习日志不嫌多,我也多发表一些实际情况的使用。
log4j需要一个log4j.properties文件来进行控制。这个文件在myeclipse下是放在src下被使用,在idea下是要指定一个resource文件夹,然后把log4j.properties放进去,工程在启动的时候会跑到你指定的resource里去加载相关的执行文件。这是引用路径问题

我在这里不会全面的介绍log4j的使用,下面是我对log4j的需要(需求):
我需要生成的日志文件内包含日志的全面信息
需要日志每天生成一份(21日生成20日的日志文件,以此类推)
需要日志文件名能以xx_生成日期.log的方式命名
我需要日志文件在tomcat根目录下的logs文件夹内生成

那么为了满足我以上需求,我在log4j.properties里的设置是这样的:
#config root logger
log4j.rootLogger = INFO,stdout,lolout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=MINAServer Logger-->%5p{%F:%L}-%m%n

log4j.appender.lolout =org.apache.log4j.DailyRollingFileAppender
log4j.appender.lolout.File=${catalina.home}/logs/cosmetics_
log4j.appender.lolout.DatePattern=yyyy-MM-dd'.log'
log4j.appender.lolout.layout=org.apache.log4j.PatternLayout
log4j.appender.lolout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L - %m%n

当然,如果是web项目,别忘了配置web.xml文件
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/classes/log4j.properties</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>

在此不解释以上配置,因为如果进行解释就无法避免大面积的介绍,网站上有详细解释。
如果你对log4j有着跟我一样的需求,那么以上代码你可直接拉去使用
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值