1

我正在开发一个 Java Servlet 项目。我正在尝试使用 log4j 来记录异常、方法输入和输出等。

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

如果我使用 Main 从测试类测试 Log4j,它可以正常工作。但是当我使用 Servlet 项目时,并没有创建日志文件。

我正在使用 Apache 和 Tomcat 开发 Eclipse

首先,我认为问题出在 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.

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

对不起我糟糕的英语

4

4 回答 4

1

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

然后将带有“debug, info, error, ...”的行编辑为“debug”或“info”,因为一次只能有一个日志级别:

log4j.logger.fnet3CustomerAreaMobile = debug, fnet3CustomerAreaMobile

第二个值必须是附加程序的名称。

检查您的 lib 目录中是否存在以下 jar:slf4j-api.jar(添加 slf4j)、slf4j-log4j12.jar(从 slf4j 重定向到 log4j)和jcl-over-slf4j.jar(从 apache commons-logging 重定向到 slf4j)。SLF4J 版本也必须兼容,使用1.6.4 (newest)。SLF4J 是通过添加和删除正确的 jar 来自动配置的(很遗憾)。只添加上面提到的罐子。

希望这可以帮助。

于 2012-04-20T19:30:04.287 回答
0

请检查您的日志。尤其是最后两行:

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

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

于 2012-04-20T19:01:54.503 回答
0

你有以下问题

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

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

第二个参数必须是 an 的名称,仅此APPENDER而已!

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

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

正确的写法是:

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

这意味着什么?这意味着两个定义的记录器将在自己定义的附加程序中分别报告 FATAL ERROR WARN INFO 和 DEBUG 日志事件。

于 2013-04-11T16:53:26.617 回答
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 绑定。

于 2012-04-20T19:18:46.963 回答