Logo
Section 1 / 2

使用 Logback

在本课程中,你将学习如何使用 Logback。

导入

使用 Logback

在本课程中,你将学习如何使用 Logback。

Logback

Logback 是作为广受欢迎的 log4j 项目的一个继任者,用于控制台和文件日志记录。使用 logback 相比 log4j 的主要优势在于其内部实现经过重写,性能提升了约十倍,同时内存占用也更小。

有关选择 logback 而非 log4j 的理由可参考此处。

需要添加的依赖

Maven

1<dependency> 2 <groupId>ch.qos.logback</groupId> 3 <artifactId>logback-classic</artifactId> 4 <version>1.2.3</version> 5</dependency>

Gradle

1compile group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.3'

以下是一个用于控制台输出和文件写入的示例 logback.xml 配置:

1<?xml version="1.0" encoding="UTF-8"?> 2<configuration> 3 4 <appender name="CONSOLE" 5 class="ch.qos.logback.core.ConsoleAppender"> 6 <append>false</append> 7 <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> 8 <level>info</level> 9 </filter> 10 <encoder> 11 <pattern>%d{HH:mm:ss.SSS} %-5level %logger{36} - %msg - \(%file:%line\) %n</pattern> 12 </encoder> 13 <immediateFlush>false</immediateFlush> 14 </appender> 15 <appender name="WARN" class="ch.qos.logback.core.FileAppender"> 16 <file>logs/warn.log</file> 17 <append>false</append> 18 <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> 19 <level>warn</level> 20 </filter> 21 <encoder> 22 <pattern>%d{HH:mm:ss.SSS} %-5level %logger{36} - %msg - \(%file:%line\) %n</pattern> 23 </encoder> 24 </appender> 25 <appender name="DEBUG" 26 class="ch.qos.logback.core.FileAppender"> 27 <file>logs/debug.log</file> 28 <append>false</append> 29 <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> 30 <level>debug</level> 31 </filter> 32 <encoder> 33 <pattern>%d{HH:mm:ss.SSS} %-5level %logger{36} - %msg - \(%file:%line\) %n</pattern> 34 </encoder> 35 </appender> 36 <appender name="INFO" class="ch.qos.logback.core.FileAppender"> 37 <file>logs/info.log</file> 38 <append>false</append> 39 <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> 40 <level>info</level> 41 </filter> 42 <encoder> 43 <pattern>%d{HH:mm:ss.SSS} %-5level %logger{36} - %msg - \(%file:%line\) %n</pattern> 44 </encoder> 45 </appender> 46 <appender name="ERROR" 47 class="ch.qos.logback.core.FileAppender"> 48 <file>logs/error.log</file> 49 <append>false</append> 50 <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> 51 <level>error</level> 52 </filter> 53 <encoder> 54 <pattern>%d{HH:mm:ss.SSS} %-5level %logger{36} - %msg - \(%file:%line\) %n</pattern> 55 </encoder> 56 </appender> 57 58 <root level="DEBUG"> 59 <appender-ref ref="CONSOLE" /> 60 <appender-ref ref="INFO" /> 61 <appender-ref ref="DEBUG" /> 62 <appender-ref ref="WARN" /> 63 <appender-ref ref="ERROR" /> 64 </root> 65 66</configuration>

日志级别

如 Logback 架构 所述,日志级别的优先级顺序如下:ALL 表示记录所有级别,TRACE 表示记录等于或高于 TRACE 的级别,依此类推。

1ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL

在项目中使用 Logback

当将 logback.xml 文件放置在项目中的以下任意路径下时:<project.dir>/src/main/resources 或 <project.dir>/src/test/resources,即可使用如下 Java 代码进行日志记录。

1import org.slf4j.Logger; 2import org.slf4j.LoggerFactory; 3 4public class Main { 5 6 private static final Logger LOG = LoggerFactory.getLogger(Main.class); 7 8 public static void main(String args[]) { 9 10 LOG.trace("log trace"); 11 LOG.trace("log trace with arguments '{}'", "arg"); 12 13 LOG.warn("log warn"); 14 LOG.warn("log warn with arguments '{}'", "arg"); 15 16 LOG.info("log info"); 17 LOG.info("log info with arguments '{}'", "arg"); 18 19 LOG.debug("log debug"); 20 LOG.debug("log debug with arguments '{}'", "arg"); 21 22 LOG.error("log error"); 23 LOG.error("log error with arguments '{}'", "arg"); 24 } 25}

运行上述 Java 代码后,不同级别的日志语句将根据配置输出到控制台,并分别写入对应级别的日志文件(例如 INFO 级别写入 info.log,DEBUG 级别写入 debug.log 等)。

  • 从开头到“Registering current configuration as safe fallback point”之间的日志信息是 Logback 在查找配置文件并为发现的配置创建附加器的过程,这些信息可以忽略。

  • 控制台的日志级别设置为 INFO,因此所有等于或高于 INFO 的级别(即 INFO、WARN、ERROR、FATAL)都会被记录。这也是为什么我们在控制台上看到 WARN、INFO、ERROR 级别日志的原因。

  • 对于其他日志级别,通过过滤器限制只记录到各自指定的级别,并写入对应的日志文件(如 info.log 中仅包含 INFO 及以上级别)。如果日志文件不存在,则会自动创建;若已存在,则会被覆盖。


了解了 Logback 的基本用法后,下一课我们将学习如何使用 AspectJ 实现日志的自动记录。

配置管理

使用切面自动记录日志