繁体   English   中英

使用spring + tomcat6,java日志恶梦和log4j的行为与预期不符

[英]java logging nightmare and log4j not behaving as expected with spring + tomcat6

我有一个spring应用程序已经配置了log4j(通过xml),并且运行在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启用了调试,但它只显示了两个包的“INFO”级别。 我的log4j配置文件只有一个简单的ConsoleAppender

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

这项工作的诀窍是什么? 这是我的误解吗? 有人能指出我正确的方向,并解释如何使这个日志混乱更加防弹?

它可能不是正在执行日志记录的log4j,因此您的log4j配置将被忽略。 使用Commons Logging的Spring日志,这是一个可以委托给各种日志框架的api,包括log4j。 要确定要使用的实现,公共日志记录会查看类路径。

如果添加了将其自己的日志记录实现拖到类路径中的依赖项,则commons日志记录现在可能会使用其他实现。

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

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

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

我认为你的问题是你没有在你的appender上设置threshold参数,并且(也许)因为你没有将这些appender分配给你的记录器。

尝试将param name="threshold" value="debug"到您的appender,然后将它们显式添加到特定(或根)记录器,如下所示:

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

此外, 此页面显示 “此附加程序不会记录优先级低于此处指定的消息,即使类别的优先级设置得更低”,这可能是您的问题的根源。

这似乎是一个很好的线索供您阅读: http//forum.springsource.org/showthread.php?t = 88250

切入追逐,似乎海报有一个Tomcat安全设置的问题。 更新的Tomcat策略文件修复了该问题。

对于log4j.xml文件,可能需要在webapp外部进行读取。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM