环境: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有着跟我一样的需求,那么以上代码你可直接拉去使用