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表示行分隔符