2

如何确定给定项目使用的日志记录系统?

它有和log4j的迹象。看起来活动配置文件是. 记录器是在类中创建的slf4jlogbacklog4j.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.jar,slf4j-api-1.6.1.jar和.log4j-1.2.16.jarcommons-logging-1.1.1.jar

什么定义了logback明显不活跃的?如何激活它?

4

4 回答 4

2

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

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

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

于 2012-12-22T17:37:37.440 回答
1

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

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

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

于 2012-12-22T19:14:14.290 回答
1

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

这里的关键是slf4j-log4j12-1.6.1.jar通过 log4j 连接 slf4j。

于 2012-12-22T18:03:49.643 回答
1

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

  • 对于 log4j,添加-Dlog4j.debug到 java 命令行。
  • 对于 slf4j,我记得添加调试代码并打印ILoggerFactory实例的类名(由LoggerFactory.getILoggerFactory()返回),这揭示了它将使用的实际记录器。
  • 不知道如何调试 logback 或 commons 日志记录,但我相信他们的文档会说明这一点。
于 2012-12-22T19:21:16.457 回答