【问题标题】:Log4j on Apache/Tomcat not workingApache/Tomcat 上的 Log4j 不工作
【发布时间】:2012-04-20 18:55:22
【问题描述】:

我正在开发一个 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.

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

对不起我的英语不好

【问题讨论】:

  • 你把 log4j.properties 和 jar 放在哪里了?
  • 你把你的 log4j.properties 文件放在哪里了?你能粘贴正在读取文件的代码吗?
  • 您是否将log4j jar添加到项目的构建路径中?
  • 我将 log4j.properties 文件放在 SRC 文件夹中,然后尝试 Webcontent,最后尝试 Webcontent/WEB-INF/Classes。
  • 我在 Webcontent/WEB-INF/Lib 和 Program Files/Apache/.../Lib 上有 Jars,然后使用“Java Build Path”在 Eclipse 上添加

标签: java apache tomcat log4j


【解决方案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 来自动配置的(很遗憾)。只添加上面提到的罐子。

希望这会有所帮助。

【讨论】:

  • 我按照你说的做了一切,但我不工作。我必须把 log4j.properties 文件放在哪里?在 src 文件夹上?在 WebContent/WEB-INF 文件夹上?在 WebContent/WEB-INF/Classess 文件夹上?我必须在项目上“设置”一些东西才能找到 log4j.properties 文件?设置一些 XML?设置项目属性?我认为这个“log4j:WARN No appenders can be found for logger (org.apache.commons.digester.Digester.sax)”。是主要问题谢谢,我会尝试一些改变,购买我真的需要帮助
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

    看看这个,看看有没有帮助。

    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 绑定。

    【讨论】:

      【解决方案4】:

      你有以下问题

      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
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-18
        • 2015-10-19
        • 1970-01-01
        • 1970-01-01
        • 2013-11-27
        • 2016-06-09
        • 2014-04-19
        • 2011-01-16
        相关资源
        最近更新 更多