2012-08-11 120 views
1

我有一个htmlunit应用程序,我通过以下几行关闭了它的日志记录,因为它在控制台中打印太多的消息,我不需要。log4j冲突?

LogFactory.getFactory().setAttribute(
    "org.apache.commons.logging.Log", 
    "org.apache.commons.logging.impl.NoOpLog"); 
java.util.logging.Logger.getLogger("com.gargoylesoftware.htmlunit") 
    .setLevel(Level.OFF); 
java.util.logging.Logger.getLogger("org.apache.commons.httpclient") 
    .setLevel(Level.OFF); 

我加入了最新的log4j罐子我的项目并进行配置,所以我可以有我自己的自定义日志信息。但是现在,来自htmlunit的所有内容也都转到我的日志文件中。我怎样才能防止这一点?我只希望我自己的日志消息转到日志文件。

+0

你的log4j配置是什么样的? – 2013-03-22 12:47:38

回答

0

了解log4j的一个重要事情是其“记录器层次结构”的概念,以及它如何影响其设置。引用log4j文档

如果记录器的名称后跟一个点是后代记录器名称的前缀,则称该记录器是另一个记录器的祖先。如果记录器 与其后代记录器之间没有先辈 ,则称其为记录器的父亲。

例如,名为“com.foo”的记录器是名为“com.foo.Bar”的记录器 的父级。同样,“java”是“java.util”的父项,“java.util.Vector”的祖先是 。这个命名方案应该是大多数开发者熟悉的 。

记录器会继承其父项的设置,“根记录器”始终位于层次结构的顶部。因此,在某种程度上,您可以将根记录器视为“默认”记录器设置,然后您可以仅为代码中包含的记录器添加这些设置。

我不知道如何在代码中设置的,但这里是我会做什么用log4j.properties文件:

# Direct log messages to a log file 
log4j.appender.file=org.apache.log4j.RollingFileAppender 
log4j.appender.file.File=logs/springapp.log 
log4j.appender.file.MaxFileSize=1MB 
log4j.appender.file.MaxBackupIndex=1 
log4j.appender.file.layout=org.apache.log4j.PatternLayout 
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n 

# Direct log messages to console 
log4j.appender.console=org.apache.log4j.ConsoleAppender 
log4j.appender.console.Target=System.out 
log4j.appender.console.layout=org.apache.log4j.PatternLayout 
log4j.appender.console.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n 

# Root logger settings: by default only log messages at level "ERROR" and above 
# will be logged. These messages will be written to console 
log4j.rootLogger=error, console 

# All loggers with names starting with "org.somecompany.someproject" 
# will log messages at all levels "DEBUG" and above. 
# They will be written to file as well as console; writing to console 
# is enabled since that setting is inherited from the root logger. 
log4j.logger.org.somecompany.someproject=debug, file 

然后,假设每个类的记录器被命名为该类的完全限定名称,然后只需将上述配置中的“org.somecompany.someproject”替换为项目中包的根包名称,并且应该给予您所需的行为。

欲了解更多信息,请看the log4j documentation