【问题标题】:mixed java logging with slf4j, log4j and java.util.logging使用 slf4j、log4j 和 java.util.logging 混合 java 日志记录
【发布时间】:2018-10-07 18:17:08
【问题描述】:

我正在 Weblogic 服务器中运行 Web 应用程序(我不是很熟悉)。
通过 JVM args 将 log4j 配置与日志级别 DEBUG 传递给应用程序。 在日志文件中我还可以找到一些 DEBUG 级别的日志条目。

到目前为止一切顺利。
在调试期间,我发现一些对 logger.debug() 的调用不在日志文件中。

private static final org.slf4j.Logger logger = LoggerFactory.getLogger(ActionCtr.class);

方法调用肯定被命中,但没有写入文件。

如果我在调试期间进入,我会在记录器中看到: org.slf4j.impl.JDK14LoggerAdapter(com.example.application.ActionCtr) “java.util.logging.FileHandler.pattern”->“%h/java%u.log”

这给我带来了一些问题(因为我无法更改正在运行的应用程序):
1) 它怎么可能使用混合的 log4j 和 java.util.logging
2) 我如何确定在哪些类中使用了什么?
3) 没有 %h/java%u.log (~/java*.log) 所以我尝试提供一个 java.util.logging 符合属性文件, 但这并没有改变 - 我如何确定正在运行的记录器从何处获取其配置以正确配置它?

【问题讨论】:

    标签: java logging log4j java.util.logging


    【解决方案1】:

    1) 怎么可能它使用的应用程序使用了混合的 log4j 和 java.util.logging

    这些日志框架中的任何一个都可以由应用程序直接使用,也可以由应用程序使用的依赖库使用。不需要太多的依赖就可以得到一堆日志框架搭便车者。

    SLF4J manual 解释了该日志记录框架如何与所有其他框架争吵。这就是您看到org.slf4j.impl.JDK14LoggerAdapter 的原因。

    我如何确定在哪些类中使用了什么?

    假设您的意思是直接使用,您可以使用JdepsJavap

    我如何确定正在运行的记录器从何处获取其配置以正确配置它?

    JConsole 工具可以在运行时访问 JUL 记录器。它还将向您显示所有系统属性,其中可能包括logging.properties 文件的路径。

    如果应用程序以非标准方式务实地配置日志记录,那么一种选择是使用java.security.debug 使用access 选项。在安全管理器下运行应用程序将获得所有或所有必需的权限,然后启用访问跟踪。

    【讨论】:

      猜你喜欢
      • 2023-03-14
      • 1970-01-01
      • 2011-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-04
      • 2021-05-26
      • 2014-12-20
      相关资源
      最近更新 更多