2012-04-20 39 views
1

我正在开发一个Java Servlet项目。我正在尝试使用log4j来记录异常,方法输入和输出等。Apache/Tomcat上的Log4j不起作用

我已经添加了Jars文件和log4j.properties文件。

如果我使用Main测试来自测试类的Log4j,它的工作原理是正确的。但是当我使用Servlet项目时,日志文件不会被创建。

我工作的Eclipse Tomcat与Apache

首先,我认为这个问题是log4j.properties文件。我从src目录移到Webcontent目录。然后我再次移动到Webcontent目录内的classes目录。但我不工作。

这是我的log4j.properties文件:

log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.Target=System.out 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %5p %c{1}:%L - %m%n 
log4j.appender.stdout.Threshold=debug 
log4j.appender.stdout.Append=true 

log4j.appender.FILEHIBERNATE=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.FILEHIBERNATE.layout=org.apache.log4j.PatternLayout 
log4j.appender.FILEHIBERNATE.datePattern='.'yyyy-MM-dd 
log4j.appender.FILEHIBERNATE.file =logs/Hibernate.log 
log4j.appender.FILEHIBERNATE.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [Level: %p]%m%n 
log4j.appender.FILEHIBERNATE.Threshold=debug 
log4j.appender.FILEHIBERNATE.Append=true 

log4j.appender.springframework=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.springframework.layout=org.apache.log4j.PatternLayout 
log4j.appender.springframework.datePattern='.'yyyy-MM-dd 
log4j.appender.springframework.file =logs/springframework.log 
log4j.appender.springframework.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [Level: %p]%m%n 
log4j.appender.springframework.Threshold=debug 
log4j.appender.springframework.Append=true 

log4j.appender.fidely=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.fidely.layout=org.apache.log4j.PatternLayout 
log4j.appender.fidely.datePattern='.'yyyy-MM-dd 
log4j.appender.fidely.file =logs/Fidely.log 
log4j.appender.fidely.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [Level: %p]%m%n 
log4j.appender.fidely.Threshold=info,debug 
log4j.appender.fidely.Append=true 

log4j.appender.fnet3CustomerAreaMobile=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.fnet3CustomerAreaMobile.layout=org.apache.log4j.PatternLayout 
log4j.appender.fnet3CustomerAreaMobile.datePattern='.'yyyy-MM-dd 
log4j.appender.fnet3CustomerAreaMobile.file =logs/customer_area_interfaces/fidelynet3CustomerAreaMobile.log 
log4j.appender.fnet3CustomerAreaMobile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [Level: %p]%m%n 
log4j.appender.fnet3CustomerAreaMobile.Threshold=debug,info,error 
log4j.appender.fnet3CustomerAreaMobile.Append=true 

log4j.appender.fnet3CustomerAreaMobileServlet=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.fnet3CustomerAreaMobileServlet.layout=org.apache.log4j.PatternLayout 
log4j.appender.fnet3CustomerAreaMobileServlet.datePattern='.'yyyy-MM-dd 
log4j.appender.fnet3CustomerAreaMobileServlet.file =logs/customer_area_interfaces/mobile/fidelynet3CustomerAreaMobile.log 
log4j.appender.fnet3CustomerAreaMobileServlet.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [Level: %p]%m%n 
log4j.appender.fnet3CustomerAreaMobileServlet.Threshold=debug,info,error 
log4j.appender.fnet3CustomerAreaMobileServlet.Append=true 

log4j.logger.net.sf.hibernate = DEBUG, FILEHIBERNATE 
log4j.logger.hibernate = DEBUG, FILEHIBERNATE 
log4j.logger.org.hibernate = DEBUG, FILEHIBERNATE 
log4j.logger.org.springframework = debug, springframework 
log4j.logger.fidely = info, fidely 
log4j.logger.fnet3CustomerAreaMobile = debug, info, error, fnet3CustomerAreaMobile 
log4j.logger.fnet3CustomerAreaMobileServlet = debug, info, error, fnet3CustomerAreaMobileServlet 

log4j.rootLogger = debug 

这是控制台:

log4j:ERROR Could not find value for key log4j.appender.info 
log4j:ERROR Could not instantiate appender named "info". 
log4j:ERROR Could not find value for key log4j.appender.error 
log4j:ERROR Could not instantiate appender named "error". 
log4j:ERROR Could not find value for key log4j.appender.info 
log4j:ERROR Could not instantiate appender named "info". 
log4j:ERROR Could not find value for key log4j.appender.error 
log4j:ERROR Could not instantiate appender named "error". 
log4j:ERROR Could not find value for key log4j.appender.info 
log4j:ERROR Could not instantiate appender named "info". 
log4j:ERROR Could not find value for key log4j.appender.error 
log4j:ERROR Could not instantiate appender named "error". 
log4j:ERROR Could not find value for key log4j.appender.info 
log4j:ERROR Could not instantiate appender named "info". 
log4j:ERROR Could not find value for key log4j.appender.error 
log4j:ERROR Could not instantiate appender named "error". 
log4j:WARN No appenders could be found for logger (org.apache.commons.digester.Digester.sax). 
log4j:WARN Please initialize the log4j system properly. 
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. 
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". 
SLF4J: Defaulting to no-operation (NOP) logger implementation 
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. 

我不知道该怎么办。 你能帮我吗?

对不起,我可怜的英语

+0

你把你的log4j.properties和jar放在哪里? – evanwong 2012-04-20 18:58:23

+0

你把你的log4j.properties文件放在哪里?你能粘贴正在读取文件的代码吗? – Mayur 2012-04-20 18:59:09

+0

您是否已将log4j jar添加到项目的构建路径中? – 2012-04-20 18:59:50

回答

0

请检查您的日志。特别是最后两行:

... 
SLF4J: Defaulting to no-operation (NOP) logger implementation 
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. 
... 

我很确定你在类路径中缺少一些库。

0

看看是否有帮助。

http://www.slf4j.org/codes.html#StaticLoggerBinder

失败org.slf4j.impl.StaticLoggerBinder

当org.slf4j.impl.StaticLoggerBinder 类不能被加载到存储器,将报告该误差加载的类。当在类路径上找不到合适的SLF4J绑定时,会发生这种情况。将 中的一个(并且只有一个)slf4j-nop.jar,slf4j-simple.jar, slf4j-log4j12.jar,slf4j-jdk14.jar或者类 上的logback-classic.jar路径应该解决问题。

自1.6.0自SLF4J版本1.6起,在没有绑定的情况下,SLF4J将默认为无操作(NOP)记录器实现。

您可以从项目下载页面下载SLF4J绑定。

1

首先将log4j.properties放入您的src文件夹中。如果您使用Maven将其置于src/main/resources。如果log4j.jar(使用版本1.2.16)位于类路径中,该文件将自动检测到。

然后编辑行:“debug,info,error,...“到‘调试’或‘信息’,因为只能有一次一个日志级别:

log4j.logger.fnet3CustomerAreaMobile = debug, fnet3CustomerAreaMobile 

第二个值必须是附加目的地的名称

检查你的lib目录以下罐子:SLF4J-api.jar文件(添加SLF4J),SLF4J-log4j12.jar(从SLF4J到log4j的重定向)和JCL-过slf4j.jar(从apache的共享记录重定向到SLF4J) 。SLF4J版本也必须兼容,使用1.6.4 (newest)。SLF4J通过添加和删除右边的罐子(可悲地)自动配置。只添加上面提到的罐子。

希望这会有所帮助。

+0

我做了像你说的一切,但我不工作。 我必须把log4j.properties文件放在哪里? 关于src folde? 在WebContent/WEB-INF文件夹上? 在WebContent/WEB-INF/Classess文件夹中? 我不得不在项目上“设置”一些东西,使其找到log4j.properties文件?,设置一些XML?设置项目推进? 我认为这个“log4j:WARN没有appender可以发现记录器(org.apache.commons.digester.Digester.sax)”。是主要问题 谢谢,我会尝试一些改变,购买我真的需要帮助 – 2012-04-23 11:57:38

0

你有以下问题

log4j.logger.fnet3CustomerAreaMobile = debug, info, error, fnet3CustomerAreaMobile 
log4j.logger.fnet3CustomerAreaMobileServlet = debug, info, error,fnet3CustomerAreaMobileServlet 

如果定义log4j.logger的=后的第一个参数是LEVEL,它可以是:{FATAL,ERROR,WARN,INFO,DEBUG,TRACE}

第二个参数必须是一个APPENDER的名字没有别的!

但你把"info""error"在那里,这是错的!

如果您还没有定义appender fnet3CustomerAreaMobile或appender fnet3CustomerAreaMobileServlet系统也会声明这一点,但事实并非如此,因为您定义了这两个appender。

正确的书写是:

log4j.logger.fnet3CustomerAreaMobile = debug, fnet3CustomerAreaMobile 
log4j.logger.fnet3CustomerAreaMobileServlet = debug, fnet3CustomerAreaMobileServlet 

这是什么意思?这意味着两个定义的记录器将在他自己定义的appender上报告致命错误WARN INFO和DEBUG记录事件。