Java 我使用什么日志系统?
如何确定给定项目使用的日志记录系统 它有Java 我使用什么日志系统?,java,log4j,slf4j,logback,apache-commons-logging,Java,Log4j,Slf4j,Logback,Apache Commons Logging,如何确定给定项目使用的日志记录系统 它有log4j、slf4j和logback的符号。看起来活动配置文件是log4j.properties。记录器是由 private static Logger log = LoggerFactory.getLogger(MyClass.class); 记录器的完整类型为org.slf4j.logger,工厂类型为org.slf4j.LoggerFactory 但是也有jarlogback-core-0.9.26.jar和logback-classic-0.9
log4j
、slf4j
和logback
的符号。看起来活动配置文件是log4j.properties
。记录器是由
private static Logger log = LoggerFactory.getLogger(MyClass.class);
记录器的完整类型为org.slf4j.logger
,工厂类型为org.slf4j.LoggerFactory
但是也有jarlogback-core-0.9.26.jar
和logback-classic-0.9.26.jar
其他jar包括slf4j-log4j12-1.6.1.jar
,slf4j-api-1.6.1.jar
,log4j-1.2.16.jar
和commons-logging-1.1.jar
什么定义了
logback
显然是非活动的?如何激活它?sl4j是一个门面,没有实际的实现。换句话说,sl4j不能单独工作,底层日志框架可以是log4j、logback、Javautil日志等等
slf4j-log4j12-1.6.1.jar依赖性意味着底层日志实现是log4j
这种方法的优点是,稍后您可以将日志实现从Log4j切换到logback(许多人都声称它更好)或任何其他日志框架。您的类与日志框架没有紧密耦合 考虑到您提到的jar,我假设日志系统是log4j,通过slf4j或commons日志访问(可能是为了满足其他框架的依赖关系而提供的)
这里的关键是slf4j-log4j12-1.6.1.jar
,它通过log4j对slf4j进行升级 您描述的类路径上同时存在logback-classic.jar和slf4j-log4j12.jar的情况是slf4j错误代码文档中提到的“”的一个实例。有关错误代码的说明如下:
SLF4J发出的警告就是,一个警告。即使
存在多个绑定,SLF4J将选择一个
框架/实现并与之绑定。SLF4J选择
绑定是由JVM决定的,对于所有实际用途,都应该
被认为是随机的。从版本1.6.6开始,SLF4J将命名
它实际绑定到的框架/实现类
奇怪的是,你在问题中没有提到这个错误消息。如果如您所说,logback-classic.jar和slf4j-log4j12.jar都确实存在于类路径上,那么slf4j肯定会打印“在类路径上发现多个绑定”作为警告。如果没有,那么类路径上实际上只存在一个绑定。如果项目代码使用slf4j,那么询问它使用的日志系统在某种程度上是问了一个错误的问题。它将使用slf4j在运行时找到的任何日志框架。如果不确定,请打开所有相关库的调试信息:
- 对于log4j,将
-Dlog4j.debug
添加到java命令行
- 对于slf4j,我记得添加了调试代码,并在其中打印了实例的类名(由返回),这显示了它将使用的实际记录器
- 我不知道如何调试logback或commons日志,但我相信他们的文档会告诉我这一点
查找所有slf4j罐。它可能将log4j桥接到slf4j,因此请检查确切的类路径。并非所有jar都在其中“工厂类型为org.slf4j.LoggerFactory”<打印名称的类不正确,请参阅下面的答案以获得正确的打印类名。如果logback-classic.jar和slf4j-log4j12.jar确实存在于类路径上,则slf4j将打印控制台的警告消息。但是,您没有提到任何这样的消息。commons也是一个门面,像slf4j?©suzan cioc是的,它直接使用log4j。