【问题标题】:What logging system I use?我使用什么日志系统?
【发布时间】:2012-12-09 21:52:29
【问题描述】:

如何确定给定项目使用什么日志系统?

它有log4jslf4jlogback的标志。看起来活动配置文件是log4j.properties。记录器是由

在类中创建的
private static Logger log = LoggerFactory.getLogger(MyClass.class);

记录器的完整类型是org.slf4j.Logger,工厂类型是org.slf4j.LoggerFactory

但也有罐子logback-core-0.9.26.jarlogback-classic-0.9.26.jar

其他罐子是slf4j-log4j12-1.6.1.jarslf4j-api-1.6.1.jarlog4j-1.2.16.jarcommons-logging-1.1.1.jar

是什么定义了logback 显然是不活动的?如何激活?

【问题讨论】:

  • 查找所有 slf4j 罐子。它可能会将 log4j 桥接到 slf4j
  • 还要检查确切的类路径。不是所有的罐子都在里面
  • "the type of factory is org.slf4j.LoggerFactory"
  • 如果类路径中确实存在 logback-classic.jar 和 slf4j-log4j12.jar,则 SLF4J 将打印控制台的警告消息。但是,您没有提到任何此类消息。

标签: java log4j slf4j logback apache-commons-logging


【解决方案1】:

sl4j 是一个门面,没有实际的实现。也就是说sl4j不能单独工作,底层的日志框架可以是log4j、logback、java util logging等等。

slf4j-log4j12-1.6.1.jar 依赖意味着底层的日志实现是 log4j。

这种方法的优点是稍后您可以将日志记录实现从 Log4j 切换到 logback(许多人声称它更好)或任何其他日志记录框架。您的类与日志框架不紧密耦合。

【讨论】:

    【解决方案2】:

    鉴于你提到的 jars,我假设日志系统是 log4j,通过 slf4j 或 commons 日志访问(可能提供以满足其他框架的依赖关系)。

    这里的关键是slf4j-log4j12-1.6.1.jar,它通过log4j 集成了slf4j。

    【讨论】:

    • commons 也是门面,和 slf4j 一样?
    • ©suzan-cioc 是的,它直接使用log4j。
    【解决方案3】:

    如果项目代码使用 slf4j,那么在某种程度上询问它使用的日志记录系统是在问一个错误的问题。它将使用 slf4j 在运行时找到的任何日志框架。如果不确定,请打开所有相关库的调试信息:

    • 对于 log4j,将 -Dlog4j.debug 添加到 java 命令行。
    • 对于 slf4j,我记得添加了调试代码并打印了 ILoggerFactory 实例的类名(由 LoggerFactory.getILoggerFactory() 返回),这揭示了它将使用的实际记录器。
    • 不确定如何调试 logback 或 commons 日志记录,但我相信他们的文档会告诉我们。

    【讨论】:

      【解决方案4】:

      您描述的 logback-classic.jar 和 slf4j-log4j12.jar 都出现在类路径上的情况是 SLF4J 错误代码文档中提到的“multiple-bindings problem”的一个实例。相关错误代码说明:

      SLF4J 发出的警告就是这样,一个警告。即使当 存在多个绑定,SLF4J 将选择一个日志记录 框架/实现并与之绑定。 SLF4J 选择的方式 绑定由 JVM 确定,并且出于所有实际目的应该 被认为是随机的。从 1.6.6 版本开始,SLF4J 将命名 它实际上绑定到的框架/实现类。

      奇怪的是,您没有在问题中提及此错误消息。如果如您所说,logback-classic.jar 和 slf4j-log4j12.jar 确实存在于类路径中,那么 SL​​F4J 肯定会打印“在类路径上找到多个绑定”作为警告。如果没有,那么类路径中实际上只存在一个绑定。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-30
        • 2013-01-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多