Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.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_Logging_Log4j - Fatal编程技术网

Java Log4j:为什么根日志记录器收集所有日志类型而不考虑配置?

Java Log4j:为什么根日志记录器收集所有日志类型而不考虑配置?,java,logging,log4j,Java,Logging,Log4j,我遇到的问题是,即使我在根标记中指定了要出错的级别,指定的附加器也会将所有级别(调试、信息、警告)记录到文件中,而不管设置如何。我不是log4j专家,因此非常感谢您的帮助 以下是关于该主题的更多信息: 我已经检查了log4j.properties的类路径(除了log4j.xml之外没有) 以下是log4j.xml文件: 如果我用另一个记录器替换根,那么指定的appender根本不会记录任何内容 。。。感谢大家迄今为止的提示:-)两件事:检查可加性并确定是否希望通过更详细的日志记录级别

我遇到的问题是,即使我在根标记中指定了要出错的级别,指定的附加器也会将所有级别(调试、信息、警告)记录到文件中,而不管设置如何。我不是log4j专家,因此非常感谢您的帮助

以下是关于该主题的更多信息:

  • 我已经检查了log4j.properties的类路径(除了log4j.xml之外没有)
以下是log4j.xml文件:


如果我用另一个记录器替换根,那么指定的appender根本不会记录任何内容



。。。感谢大家迄今为止的提示:-)

两件事:检查可加性并确定是否希望通过更详细的日志记录级别捕获的日志事件传播到根日志记录器


其次,检查根记录器的级别。此外,您还可以在appender本身上添加过滤,但是这通常是不必要的。

使用-Dlog4j.debug运行程序,这样standard out就可以获得有关log4j如何配置的信息——我怀疑它没有按照您认为的方式进行配置。

要补充James A.N.Stauffer和cynicalman所说的内容,我敢打赌还有另一个log4j.xml/log4j.properties您希望使用的类路径以外的其他类路径导致log4j按原样配置自身


-Dlog4j.debug
是解决任何log4j问题的绝对杀手级方法。

如果您使用的是
log4j.properties
文件,该文件通常应位于类路径的根目录中,因此请确保它在那里。

这是正确的行为。根记录器类似于默认行为。因此,如果不指定任何记录器,它将以根记录器级别作为默认级别,但这并不意味着根记录器级别是所有日志的级别

使用“TraceLogger”记录器或“org.springframework.ws.server.endpoint.interceptor”记录器记录的任何代码都将分别使用跟踪和调试级别记录消息。任何其他代码都将使用根记录器使用级别记录消息,这在您的示例中是错误的

所以,如果使用根以外的记录器,则根日志级别将被该记录器的日志级别覆盖。要获得所需的输出,请将其他两个日志级别更改为ERROR


我希望这是有帮助的

根记录器位于记录器层次结构的顶部。它在三个方面是例外的:

  • 它总是存在的
  • 其级别不能设置为空
  • 无法按名称检索它
根记录器是所有附加器之父。给定记录器的每个启用的日志记录请求都将转发给该记录器中的所有附加程序以及层次结构中更高的附加程序(包括rootLogger)

例如,如果将
控制台
追加器添加到
根记录器
,则所有启用的日志记录请求将至少在控制台上打印。如果另外向记录器添加了文件追加器,例如
L
,则
L
L的
子项的启用日志记录请求将打印在
控制台上的文件上。通过将additivity标志设置为false,可以覆盖此默认行为,使追加器累积不再是加法的

从log4j手册

总而言之:

如果您不想将日志事件传播到父日志记录器(比如rootLogger),那么在这些日志记录器中将additivity标志添加到false。就你而言:


在标准log4j配置样式中(我更喜欢XML):


希望这能有所帮助。

你能展示一下你到目前为止所做的工作,以便人们可以查看吗?如果没有看到类路径的内容,包括你认为正在使用的配置文件,就无法回答这个问题。是的,我会的。但是早上(现在我太累了)
log4j.logger.org.springframework.ws.server.endpoint.interceptor = INFO, payloadAppender
log4j.additivity.org.springframework.ws.server.endpoint.interceptor = false