vlambda博客
学习文章列表

MEMO - logback日志配置备忘

以在Dubbo中使用slf4j+logback日志实现为例,分如下步骤描述:

  • 引入项目依赖(maven)

  • 指定日志框架

  • 添加配置文件

  • logback的常用pattern含义

引入项目依赖(maven)

依赖可通过引入Spring Boot的starter来快速实现。

目前,Spring Boot内置了两个日志相关的starter:

  • spring-boot-starter-logging

    使用slf4j + logback的组合

  • spring-boot-starter-log4j2

    使用slf4j + log4j2的组合

Spring Boot默认使用slf4j + logback的组合,因为在spring-boot-starter中包含了spring-boot-starter-logging。

指定日志框架

Dubbo中指定日志框架主要有3种方式:

  • 通过JVM参数
    -Ddubbo.application.logger=slf4j
  • 通过在dubbo.properties中设置
    dubbo.application.logger=slf4j
  • 在dubbo.xml中设置
    <dubbo:application logger="log4j" />

添加配置文件

Dubbo项目在启动(通过Main.main方法)的时候,如果找不到配置文件,会默认讲root logger的日志级别设置为DEBUG,并输出到Console上。

如果想只输出INFO级别的消息,则可以创建配置文件logback.xml,重新定义root logger,输出到Console即可,如下:

<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36}:%L - %m%n
      </pattern>
    </encoder>
  </appender>

  <root level="debug">
    <appender-ref ref="STDOUT"/>
  </root>

</configuration>

应用启动的时候,会调用到org.slf4j.impl.StaticLoggerBinder的init()方法,该方法会初始化一个ch.qos.logback.classic.util.ContextInitializer,并调用其autoConfig()方法。

在autoConfig()中,会根据是否有配置文件,决定是从配置文件读取日志相关配置,还是使用默认的配置。默认的配置会将日志级别设置为DBUG,并输出到Console。

如果想调整某一个logger的日志级别,则可以在<root> 标签之前,添加配置即可,如下:

<logger name="com.apache.dubbo" level="INFO" />

logback的常用pattern含义

logback中pattern的含义,定义在ch.qos.logback.classic.PatternLayout中,常见的有:

  • date、d表示日期
  • level、le、p表示日志登记
  • thread、t表示线程名称
  • logger、lo、c表示logger名称,后面跟{长度}启用缩写,比如%logger{36}
  • message、msg、m表示日志内容
  • class、C表示调用方的类名
  • method、M表示调用的方法
  • line、L表示调用处的行号
  • mdc、X表示mdc
  • n表示行分隔符