-
JDK Logging
由jdk提供的日志打印类:java.util.logging.Logger
配置需要启动时指定,所以用的很少:-Djava.util.logging.config.file=<config-file-name> -
Commons Logging
由apache提供的第三方日志库接口,他可以挂接不同的日志系统,并通过配置文件指定挂接哪个日志系统。
默认情况下,Commons Logging会自动搜索并使用Log4j,如果没有则使用JDK Logging。 -
Log4j
Log4j是一种具体实现。
Appender -> Filter -> Layout -> socket。
log4j2.xml 放在classpath即可让Log4j读取配置。
在使用时,不直接应用Log4j的类,而是通过Commons Logging作为接口(外观/门面模式) -
SLF4J 和 Logback
slf4j相当于 commons Logging作为日志接口,Logback类似log4j是一种日志实现。
slf4j可以使用{}占位符打印日志,且性能做了优化。
logback.xml 方在classpath中即可让logback读取配置。 -
log4j-over-slf4j
使用 log4j-over-slf4j 替代log4j,这样log4j接口数据的日志就会通过log4j-over-slf4j路由到slf4j上,这样即使引入的三方库使用log4j打印日志,也会被统一到系统的slf4j日志中。
log4j-over-slf4j包按log4j包实现了其中的各个类,这样替换后可以保证编译不出错。但内部代码则是代理到了slf4j接口。 -
slf4j-log4j12
slf4j是门面,log4j是具体实现,但log4j并不是slf4j的原生实现,所以需要一层进行桥接。(logback是slf4j的原生实现,所以不需要这种包)。
如果系统中同时出现slf4j-log4j12和log4j-over-slf4j就会形成循环调用导致stackoverflow。
相同的还有(jcl-over-slf4j和slf4j-jcl)
网友评论