0%

关于日志那些事儿

关于日志那些事儿

JCL(Commons-logging)

  • Apache日志抽象
  • 动态绑定机制,在程序运行时自动找出真正使用的日志库
    • 扫描classpath下的META-INF/services/org.apache.commons.logging.LogFactory,若找到则使用里面配置
    • 从Classpath里寻找commons-logging.properties,找到则根据里面配置加载
    • 能找到Log4j使用Log4j,找不到使用JDK14Logger,再找不到使用内部SimpleLog
  • 不支持日志输出占位符

SLF4J(Simple logging facade for Java)

  • commons-logging类似也是日志抽象

  • 静态绑定,编译时绑定真正的log实现

    • 任何基于SLF4J的实现都需要定义StaticLoggerBinder
  • 支持日志输出占位符

  • 提供桥接器将基于commons-logging jul的日志重定向到slf4j

    1
    2
    3
    4
    5
    <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-jcl</artifactId>
    <version>1.7.25</version>
    </dependency>

Log4j

  • Apache开源日志框架
  • org.apache.log4j 为log4j
    • 不支持日志输出占位符
  • org.apache.logging.log4j 为log4j2
    • 支持日志输出占位符
  • 可以通过配置文件控制每一条输出日志的格式

Logback

  • log4j创始人设计的另一开源日志组件
  • 支持日志输出占位符
  • 分为三个模块
    • logback-core 基础模块
    • logback- classic log4j的改良版本,完整实现slf4j api
    • logback-access 访问模块与Servlet容器继承提供通过Http来访问日志的功能
  • 需要与SLF4J结合用

项目使用

SLF4J

  • SLF4J只提供Log接口,具体实现靠绑定器slf4j-***-version.jar *** 可以为log4j12 jdk14 jcl

  • 如果程序中已经使用了JCL 则需要桥接器***-over-slf4j.jar将日志重定向到SLF4J