【问题标题】:log4j with tomcat does not log what is logged in mvn test带有tomcat的log4j不记录mvn test中记录的内容
【发布时间】:2013-05-21 05:14:00
【问题描述】:

我有一个网络应用程序。当我运行“mvn test”时,它会将调试消息记录到控制台,就像我配置的那样。但是当我将它部署到 tomcat 时,我看不到应用程序的日志。我绝对确定我在战争中的正确位置获得了 log4j.properties 文件,就像当我更改已部署的 /var/lib/tomcat7/webapps/worldmodel/WEB-INF/classes/log4j.properties 中的值时一样logger 或 hibernate 和 touch web.xml,我看到/看到了 hibernate 的调试日志。但是我无法使用我尝试过的任何配置记录我的应用程序的调试消息。 这是我进行日志记录的方式:

import org.apache.log4j.Level;
import org.apache.log4j.Logger;

logger = Logger.getLogger(BaseObject.class);
log(Level.DEBUG,"message");

这是用于测试的 log4j.properties:

log4j.rootLogger=INFO, CONSOLE

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Encoding=UTF-8
log4j.appender.CONSOLE.layout = org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern = %d [%t] %-5p %c- %m%n

log4j.appender.SYSLOG = org.apache.log4j.net.SyslogAppender
log4j.appender.SYSLOG.syslogHost = 127.0.0.1
log4j.appender.SYSLOG.layout = org.apache.log4j.PatternLayout
log4j.appender.SYSLOG.layout.ConversionPattern = %d [%t] %-5p %c- %m%n
log4j.appender.SYSLOG.Facility = LOCAL0

log4j.logger.org.rulez.magwas.worldmodel=DEBUG
#log4j.logger.org.hibernate.SQL=debug 
#log4j.logger.org.hibernate.type.descriptor.sql.BasicBinder=trace
#log4j.logger.org.hibernate.type=trace 

这里是部署的 log4j.properties:

log4j.rootLogger=INFO, SYSLOG

log4j.appender.SYSLOG = org.apache.log4j.net.SyslogAppender
log4j.appender.SYSLOG.syslogHost = 127.0.0.1
log4j.appender.SYSLOG.layout = org.apache.log4j.PatternLayout
log4j.appender.SYSLOG.layout.ConversionPattern = %d [%t] %-5p %c- %m%n
log4j.appender.SYSLOG.Facility = LOCAL0

log4j.logger.org.rulez.magwas.worldmodel=DEBUG
#log4j.logger.org.hibernate.SQL=debug 
#log4j.logger.org.hibernate.type.descriptor.sql.BasicBinder=trace
#log4j.logger.org.hibernate.type=trace 

我在 mvn 测试中得到这样的行:

2013-05-21 07:12:17,751 [main] DEBUG org.rulez.magwas.worldmodel.BaseObject- setValue0e9é 072r 074t 0e9é 06bk

整个项目:https://github.com/magwas/worldmodel/commit/c6b08da0a733d9b61257c669e0cc4af9e59444be

编辑:

好吧,算了,代码(bean中的getter和setter方法)似乎没有被调用,也许hibernate直接设置/获取值?

【问题讨论】:

  • 您确定您的 Tomcat 安装中没有其他记录器吗?
  • 您确定正在调用执行日志记录的代码吗?尝试用 sysout 替换它以确认。
  • 查看问题中的编辑。我应该为我记录的每个类实例化一个记录器吗?
  • 对不起。是的,我在代码中看到了其他肯定被调用的日志。感谢您的帮助,很抱歉将您的资源用于此类 n00b 错误。

标签: java maven tomcat log4j


【解决方案1】:

由于您正在使用级别 INFO 配置 ROOT 记录器,因此它不会显示任何 DEBUG 级别消息。

log4j.rootLogger=INFO, SYSLOG

上述 rootLogger 应配置为 DEBUG 以在您的日志中查看调试和其他更高级别(Fatal、Error、Warn 和 Info)。

log4j.rootLogger=DEBUG, SYSLOG

我不确定您的 Maven 测试用例配置是什么,但您共享的 log4j.properties 可能在那里没有任何效果。

编辑:从您的编辑看来,您的登录生产配置错误。如果您的日志记录设置为 INFO,则不应记录 DEBUG 消息。我的意思是,这完全违背了设置日志级别的目的,清楚地表明 Log4j 没有正确配置,并且耗尽了 Prod 资源的空间和时间。

【讨论】:

    猜你喜欢
    • 2012-07-01
    • 2012-10-08
    • 2014-02-11
    • 2013-05-21
    • 2013-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-22
    相关资源
    最近更新 更多