java应用的日志框架梳理

作为一个java开发者,你一定听说过SLF4J、JCL(Apache Commons Logging)、log4j、logback这些五花八门的名词。如果没有系统的了解过java面世以来出现过的种种日志框架,那么就无法理解为什么会有这么多的日志框架和实现、也无法清楚该怎么使用这些日志库。这也是本文的目的,梳理出一个适用于日常开发使用日志框架的方式。

常见的java日志框架

  1. log4j
  2. logback
  3. j.u.l(java.util.logging)
    正是由于这些各种各样的日志框架,为了在开发过程中统一日志接口,出现了”日志门面”规范了相关接口。也方便在日后有需要时可以替换具体的日志框架。

常见的java日志门面(即API接口)

  1. SLF4J
  2. Apache Commons Logging(JCL)
    所谓的日志门面就是提供一些输出日志的类接口,开发者在应用代码中可调用这些接口来输出日志。但输出日志的实现还要依靠具体的日志框架来实现。

如何使用日志框架

在开发时,我们可以搭配slf4j + logback这种搭配来作为我们的日志输出框架。(logback为log4j的重构版本)。而且slf4j为我们提供了多个jar包方便我们替换遗留系统中的日志框架。

例如在使用spring框架时,我们要使用slf4j+logback来作为我们的日志框架。需要增加如下依赖:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<exclusions>
<!--使用slf4j+logback这个日志框架组合的话,需要排除comons-logging-->
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--日志桥接器,把日志输出重定向到slf4j-->
<!--jcl-over-slf4j实际上是实现了comons-logging的所有接口;在spring的代码中,导入commons-logging的类时,导入的是相应的jcl-over-slf4j实现-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<!--logback-classic本地直接实现slf4j-api接口-->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${logback.version}</version>
</dependency>

参考资料