Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我使用什么日志系统?_Java_Log4j_Slf4j_Logback_Apache Commons Logging - Fatal编程技术网

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

但是也有jar
logback-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。