(1). 概述

因为,项目需要记录一些日志(比如:方法执行前后或者在抛出异常),如果,写相应的代码去支持,让业务在每个方法里调用,代码会显得相当的难看,当然,有另外的解决方法,比如Spring里的AOP,我这里不用AOP(私有方法AOP不支持),而是直接对Logger对象进行扩展.

(2). 先看一段logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan.ShopifyTokenHandlerService="true" scanPeriod="10 seconds">
    <property name="STDOUT_PATTEN"
              value='[%d{yyyy-MM-dd HH:mm:ss.SSS}] %highlight([%level]) [${PID:- }] [%thread] [%X{serverName}] [%X{traceId:-0}] [%X{tenantId:-0}] [%logger{5}\:%line#%M] %highlight([%msg]) %n'/>
    <!--    [时间][日志等级][进程PID][线程名][服务名称][TraceID][租户ID][包首字母.类名][日志信息]-->
	
    <!--输出到控制台-->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <Pattern>${STDOUT_PATTEN}</Pattern>
            <!-- 设置字符集 -->
            <charset>UTF-8</charset>
            <immediateFlush>false</immediateFlush>`
        </encoder>
    </appender>
	
	
    <!-- 解决debug模式下循环发送的问题 -->
    <logger name="org.apache.http.impl.conn.Wire" level="WARN"/>

    <root level="info">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE"/>
        <appender-ref ref="loghubAppender"/>
    </root>
	
</configuration>

(3). 看一下Logback类图

Logback类图

(4). 总结

我所要做的事情就是,找到Configuration对象,往里头添加:Appender的实现,这样,开发不需要在XML里配置,而且,全程透明.