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

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

[b]本文为日记,不推荐新手初学,只记录一些工作中遇到的解决方案[/b]
在用maven加入log4j时出现问题。
以下为我在maven里的加入的log4j的依赖

org.slf4j
slf4j-log4j12
1.7.2

问题首先出现在maven进行build的时候报出的错误。我为保证程序运行写的测试,maven进行build的时候大量出错,错误提示都来自这个类org.slf4j.spi.LocationAwareLogger.log
经过查询了解,该错误为运行时报错,缺少某些包的支持,加入下列支持时,maven进行编译时不再报错

org.slf4j
jcl-over-slf4j
1.7.2
jar
runtime


但随后在启动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

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

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

正解是... ...!!
缺少了下列依赖

org.slf4j
slf4j-jdk14
1.7.5

添加上这个依赖,一切问题就都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文件

log4jConfigLocation
/WEB-INF/classes/log4j.properties


org.springframework.web.util.Log4jConfigListener


在此不解释以上配置,因为如果进行解释就无法避免大面积的介绍,网站上有详细解释。
如果你对log4j有着跟我一样的需求,那么以上代码你可直接拉去使用

你可能感兴趣的:(JAVA)