Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.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在spring+tomcat6中的表现与预期不符_Java_Spring_Logging_Log4j_Tomcat6 - Fatal编程技术网

java日志记录噩梦和log4j在spring+tomcat6中的表现与预期不符

java日志记录噩梦和log4j在spring+tomcat6中的表现与预期不符,java,spring,logging,log4j,tomcat6,Java,Spring,Logging,Log4j,Tomcat6,我有一个spring应用程序,它通过xml配置了log4j,并在Tomcat6上运行,在我们通过Maven添加了一系列依赖项之前,它工作得很好。在某个时刻,整个应用程序刚刚开始将它应该声明的部分内容记录到log4.xml中 这里有一个小小的咆哮,为什么在java世界中日志记录必须如此困难?为什么一个刚刚好的应用程序突然开始表现得如此怪异,为什么调试起来如此困难 我已经阅读并试图解决这个问题好几天了,但到目前为止运气不好,希望这里的一些专家能给我一些见解 我添加了log4j调试选项来检查log4j

我有一个spring应用程序,它通过xml配置了log4j,并在Tomcat6上运行,在我们通过Maven添加了一系列依赖项之前,它工作得很好。在某个时刻,整个应用程序刚刚开始将它应该声明的部分内容记录到log4.xml中

这里有一个小小的咆哮,为什么在java世界中日志记录必须如此困难?为什么一个刚刚好的应用程序突然开始表现得如此怪异,为什么调试起来如此困难

我已经阅读并试图解决这个问题好几天了,但到目前为止运气不好,希望这里的一些专家能给我一些见解

我添加了log4j调试选项来检查log4j是否正在读取配置文件及其值,这是它显示的部分

log4j: Level value for org.springframework.web is  [debug].
log4j: org.springframework.web level set to DEBUG
log4j: Retreiving an instance of org.apache.log4j.Logger.
log4j: Setting [org.compass] additivity to [true].
log4j: Level value for org.compass is  [debug].
log4j: org.compass level set to DEBUG
如您所见,compass和spring.web启用了调试,但它只显示两个包的信息级别。我的log4j配置文件没有什么特别之处,只是一个普通的控制台程序

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

 <!-- Appenders -->
 <appender name="console" class="org.apache.log4j.ConsoleAppender">
  <param name="Target" value="System.out" />
  <layout class="org.apache.log4j.PatternLayout">
   <param name="ConversionPattern" value="%-5p: %c - %m%n" />
  </layout>
 </appender>
要想让这一切顺利,有什么诀窍?我的误解是什么?
有人能给我指出正确的方向,并解释一下如何让这个日志更加防弹吗?

在您通过Maven加载了许多依赖项之前,它一直在工作,也许是通过这些依赖项无意中加载了Log4j配置


运行mvn dependency:tree以查看正在加载的内容,然后查看这些依赖项中是否有任何依赖项具有Log4j配置。

在您通过Maven加载多个依赖项之前,它一直在工作,可能是无意中通过这些依赖项加载了Log4j配置


运行mvn dependency:tree以查看正在加载的内容,然后查看这些依赖项是否有Log4j配置。

执行日志记录的可能不是Log4j,因此您的Log4j配置将被忽略。Spring使用Commons日志记录日志,这是一个api,可以委托给各种日志记录框架,包括log4j。为了决定使用哪个实现,commons日志检查类路径

如果您添加了一个将自己的日志记录实现拖入类路径的依赖项,那么commons日志记录现在可能会使用另一个实现


我建议在调用日志设施时设置一个断点,并跟踪执行情况,以查看使用了哪个日志实现。

可能不是log4j在进行日志记录,因此您的log4j配置将被忽略。Spring使用Commons日志记录日志,这是一个api,可以委托给各种日志记录框架,包括log4j。为了决定使用哪个实现,commons日志检查类路径

如果您添加了一个将自己的日志记录实现拖入类路径的依赖项,那么commons日志记录现在可能会使用另一个实现


我建议在调用日志记录工具时设置断点,并跟踪执行情况,以查看使用了哪个日志记录实现。

我认为您的问题在于您没有在附加器上设置阈值参数,可能是因为您没有将这些附加器分配给记录器

尝试将param name=threshold value=debug添加到附加程序中,然后将它们显式添加到特定或根记录器中,如下所示:

<appender name="console" class="org.apache.log4j.ConsoleAppender">
    <param name="threshold" value="debug" />
    <param name="Target" value="System.out" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%-5p: %c - %m%n" />
    </layout>
</appender>

<logger name="org.springframework.web">
    <level value="debug" />
    <appender-ref ref="console" />
</logger>

此外,表示即使类别的优先级设置较低(这可能是问题的根源),此附加程序也不会记录优先级低于此处指定优先级的任何消息

我认为您的问题在于您没有在appender上设置threshold参数,可能是因为您没有将这些appender分配给记录器

尝试将param name=threshold value=debug添加到附加程序中,然后将它们显式添加到特定或根记录器中,如下所示:

<appender name="console" class="org.apache.log4j.ConsoleAppender">
    <param name="threshold" value="debug" />
    <param name="Target" value="System.out" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%-5p: %c - %m%n" />
    </layout>
</appender>

<logger name="org.springframework.web">
    <level value="debug" />
    <appender-ref ref="console" />
</logger>

此外,表示即使类别的优先级设置较低(这可能是问题的根源),此附加程序也不会记录优先级低于此处指定优先级的任何消息

这似乎是一个很好的阅读线索:

直截了当地说,海报上的Tomcat安全设置似乎有问题。更新的Tomcat策略文件修复了该问题


可能与在webapp之外阅读log4j.xml文件有关。

这似乎是一个很好的阅读线索:

直截了当地说,海报上的Tomcat安全设置似乎有问题。更新的Tomcat策略文件修复了该问题


可能与在webapp之外读取log4j.xml文件有关。

删除这些依赖项后,日志是否还能工作?只是想缩小问题的范围……当您去掉这些依赖项时,日志记录还能工作吗?只是试图缩小问题范围…感谢您的尝试,但是log4调试信息显示它使用的是我的配置文件而不是其他log4j:using URL[file:/home/xxxxxx/comp/.metadata/.plugins/org.eclipse.wst.server.core/t
mp0/wtpwebapps/app1/WEB-INF/classes/log4j.xml]用于自动log4j配置。log4j:感谢您的尝试,但是log4调试信息显示它使用的是我的配置文件,而不是其他log4j:使用URL[file:/home/xxxxxx/comp/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/app1/WEB-INF/classes/log4j.xml]来自动配置log4j。log4j:非常感谢meriton,实际上还有另一个实现,实际上是slf4j simple默认禁用了调试级别。在将其更改为slf4j-log4j12后,它将根据log4j.xml中设置的prefs开始记录。非常感谢meriton,实际上还有另一个实现,实际上是slf4j simple默认禁用了调试级别。将其更改为slf4j-log4j12后,它将根据log4j.xml中设置的prefs开始记录感谢您提供的信息,尽管这不是我的情况,但清楚这一点很重要。感谢您提供的信息,尽管这不是我的情况,但清楚这一点很重要。感谢您提供的有关阈值和每个附加器的级别的提示,非常有用谢谢你提供的关于每个附加器的阈值和级别的提示,非常有用