Log学习--SLF4J+Logback日志模块的使用
1、首先说一下为啥不推荐在业务代码中直接使用 Logback,而是要使用 SLF4J这类日志门面模块(JCL :Java Com罪焐芡拂mon Logging 是另一套曾经流行的日志门面)?其实这就是面向接口编程的一种体现(设计原则之接口隔离),日志实现模块是具体的东西,是变化的不断升级的,如果我们的代码强耦合某一具体的日志实现模块,当这个日志模块出现了bug或有了更好的日志实现模块出现,我们都会非常被动!如果我们的代码只是依赖SLF4J这类门面模块,替换具体日志实现模块的操作就会易如反掌!然后再简单说一下既然已经有了 JCL 这个日志门面,为啥还要再开发一套 SLF4J 呢?因为 JCL 的日志接口设计不合理,在某些应用场景下会出现性能问题(涉及到日志级别与字符串拼接等,具体可百度),所以 SLF4J 这个替代者就自然而然地诞生了!
2、了解了一些基础的理论知识后,我们开始使用 SLF4J + Logback。日志组件作为通用模块,其使用方法也大同小异,通常就如下3步:1. 工程中引入相关依赖(jar包)2. 编写日志输出的配置文件3. 代码中创建日记记录类对象,记录日志
3、引入相关依赖,如果你创建的是Maven工程,则将如下内容拷贝到工程POM文件中即可,如果不是Maven工程,则你需要下载对刂茗岚羟应的4个jar包,并添加到工程的类路径下:<!-- slf4j模块 --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.25</version> </dependency> <!-- logback-core基础模块 --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>1.2.3</version> </dependency> <!-- slf4j 接口实现模块 --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> </dependency> <!-- http访问日志模块 --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-access</artifactId> <version>1.2.3</version> </dependency>
4、编写日志输出配置文件,在Maven工程的resources目录下创建 logback.xml 其中主要配置3种内容配置:<appender>、 <logger> 和 <root><appender> : 日志输出配置,包含日志输出目的地,过滤器,日志格式,滚动策略等(针对输出到文件的配置)<logger> 和 <root> : 这两个都是日志记录对象的配置,包含日记记录级别,所使用的 appender 等。
5、Logger 配置文件补充,我们上一步骤使用的是 logback.xml 作为配置文件,其实 Logback 有很多定位配置文件的规则,其会按如下顺序获取配置文件(找到即止):1. 如果指定了 logback.configurationFile 属性的值,则使用该属性指定的文件作为配置文件2. 类路径下寻找 logback.groovy 文件3. 类路径下寻找 logback-test.xml 文件4. 类路径下寻找 logback.xml 文件
6、代码中使用 Logback,在代码中,我们只需调用 SLF4J 提供的日志工厂 LoggerFactory 创建 Logger 对象即可,注意,正如我们前面提到的,实际代码开发过程中,只会使用 SLF4J 组件提供的接口和类。
7、Logback 还提供了 DBAppender 和 SMTPAppender 两种 <appender> 将相关日志输出到数据库和通过邮件发送给特定人,具体用法,大家可以自行研究。