java日志体系

  1. JDK Logging
    由jdk提供的日志打印类:java.util.logging.Logger
    配置需要启动时指定,所以用的很少:-Djava.util.logging.config.file=

  2. Commons Logging
    由apache提供的第三方日志库接口,他可以挂接不同的日志系统,并通过配置文件指定挂接哪个日志系统。
    默认情况下,Commons Logging会自动搜索并使用Log4j,如果没有则使用JDK Logging。

  3. Log4j
    Log4j是一种具体实现。
    Appender -> Filter -> Layout -> socket。
    log4j2.xml 放在classpath即可让Log4j读取配置。
    在使用时,不直接应用Log4j的类,而是通过Commons Logging作为接口(外观/门面模式)

  4. SLF4J 和 Logback
    slf4j相当于 commons Logging作为日志接口,Logback类似log4j是一种日志实现。
    slf4j可以使用{}占位符打印日志,且性能做了优化。
    logback.xml 方在classpath中即可让logback读取配置。

  5. log4j-over-slf4j
    使用 log4j-over-slf4j 替代log4j,这样log4j接口数据的日志就会通过log4j-over-slf4j路由到slf4j上,这样即使引入的三方库使用log4j打印日志,也会被统一到系统的slf4j日志中。
    log4j-over-slf4j包按log4j包实现了其中的各个类,这样替换后可以保证编译不出错。但内部代码则是代理到了slf4j接口。

  6. slf4j-log4j12
    slf4j是门面,log4j是具体实现,但log4j并不是slf4j的原生实现,所以需要一层进行桥接。(logback是slf4j的原生实现,所以不需要这种包)。
    如果系统中同时出现slf4j-log4j12和log4j-over-slf4j就会形成循环调用导致stackoverflow。
    相同的还有(jcl-over-slf4j和slf4j-jcl)

你可能感兴趣的:(java日志体系)