Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java log4j冲突?_Java_Log4j_Htmlunit - Fatal编程技术网

Java log4j冲突?

Java log4j冲突?,java,log4j,htmlunit,Java,Log4j,Htmlunit,我有一个htmlunit应用程序,我通过以下几行关闭了它的日志记录,因为它在控制台中打印了太多我不需要的消息 LogFactory.getFactory().setAttribute( "org.apache.commons.logging.Log", "org.apache.commons.logging.impl.NoOpLog"); java.util.logging.Logger.getLogger("com.gargoylesoftware.htmlunit")

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

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);

然后,我将最新的log4jjar添加到我的项目中,并对其进行了配置,这样我就可以拥有自己的自定义日志消息。但是现在,从htmlunit到我的日志文件的所有内容都被删除了。我怎样才能防止这种情况?我只想让我自己的日志消息进入日志文件。

了解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”替换为项目中包的根包名,这将为您提供所需的行为


有关更多信息,请查看。

您的log4j配置是什么样子的?