(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类图
(4). 总结
我所要做的事情就是,找到Configuration对象,往里头添加:Appender的实现,这样,开发不需要在XML里配置,而且,全程透明.