3

我无法让 Apache Commons Digester记录任何内容。我会非常感谢任何人都可以散发的光芒。

在我的代码中,我正在这样做:

Digester digester = new Digester();
// some Digester set up stuff

// What on earth should go in here????
digester.setLogger(LogFactory.getLog("org.apache.commons.logging.Log"));

我的类路径中有一个commons-logging.properties文件,如下所示:

org.apache.commons.logging.Log=org.apache.commons.logging.impl.SimpleLog
org.apache.commons.logging.simplelog.log.org.apache.commons.digester.Digester=debug
org.apache.commons.logging.simplelog.log.org.apache.commons.digester.Digester.sax=info

我根本没有得到任何调试信息。

谢谢你的帮助!

更新:感谢 bwawok 的回答 - 这就是问题所在。在Digester 的文档中,他们建议您可以启用SimpleLogcommons-logging。不幸的是,Digester似乎没有输出任何 INFO 消息,只有 DEBUG,至少在 eclipse 上,SimpleLog根本不输出 DEBUG 消息!结果是没有 INFO 消息(因为Digester不发送)也没有 DEBUG 消息(因为SimpleLog不转发它们!)一旦我切换到 log4j,所有的调试消息都喷涌而出!再次感谢。

4

1 回答 1

2

我建议您不要使用公共日志记录。它有一些问题,例如不能很好地与 Tomcat 5.5 及更高版本配合使用。

如果您正在编写自己的应用程序(而不是库),我建议您直接对 Log4j 进行编码。在http://logging.apache.org/log4j/1.2/manual.html阅读教程。您将拥有一个 log4j.properties 文件,如下所示

log4j.rootLogger=debug, stdout, R

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

# Pattern to output the caller's file name and line number.
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n

log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=example.log

log4j.appender.R.MaxFileSize=100KB
# Keep one backup file
log4j.appender.R.MaxBackupIndex=1

log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n

然后在您的应用程序中,您将使用

Logger logger = Logger.getLogger(MyClassName.class);
logger.info("Doing something I want to log at info... " );
logger.warn("Danger!");

相反,如果您正在编写一个库来分发(大多数人在当天使用公共日志记录),请查看 sl4j。http://www.slf4j.org/。大多数库正在切换到此而不是公共日志记录。

于 2010-05-05T02:05:51.987 回答