LogBack

LogBack

首先谈到日志,我们可能听过log4j logback slf4j这三个名词,那么它们之间的关系是怎么样的呢?SLF4J,即简单日志门面(Simple Logging Facade for JAVA),不是具体的日志解决方案,它只服务于各种各样的日志系统。一般来说,slf4j配合log4j、logback进行使用,可以理解为slf4j是标准,log4j和logback是实现.

这次讲下logback-spring.xml的配置

Appender

  • Logback将执行日志事件输出的组件称为Appender
  • 实现的Appender必须继承 ch.qos.logback.core.Appender接口,这个接口有一个doAppender方法
  • Appender最终都会负责输出日志,但是他们也可能将日志格式化的工作交给Layout,或者Encoder对象。
  • logback-spring.xml中有许多的appender,这里我们挑几个项目中用的讲下

ConsoleAppender

  • 顾名思义这个是打印到控制台的appender

AsyncAppender

  • AsyncAppender记录ILoggingEvents的方式是异步的。它仅仅相当于一个event分配器,因此需要配合其他appender才能有所作为。


RollingFileAppender

  • RollingFileAppender继承自FileAppender,提供日志目标文件自动切换的功能。例如可以用日期作为日志分割的条件。
  • RollingFileAppender有两个重要属性,RollingPolicy负责怎么切换日志,TriggeringPolicy负责何时切换.
  • 为了使RollingFileAppender起作用,这两个属性必须设置,但是如果RollingPolicy的实现类同样实现了TriggeringPolicy接口,则也可以只设置RollingPolicy这个属性。


RollingPolicy

  • 负责日志文件的切换以及重命名
  • TimeBasedRollingPolicy:日志滚动策略基于时间的,例如根据天数,月份


SentryAppender

    • 通过Raven上报的sentry
@Override
protected void append(ILoggingEvent iLoggingEvent) {
// Do not log the event if the current thread is managed by raven
if (RavenEnvironment.isManagingThread())
return;

RavenEnvironment.startManagingThread();
try {
if (raven == null)
initRaven();

if (minLevel != null && !iLoggingEvent.getLevel().isGreaterOrEqual(minLevel))
return;

Event event = buildEvent(iLoggingEvent);
raven.sendEvent(event);
} catch (Exception e) {
addError("An exception occurred while creating a new event in Raven", e);
} finally {
RavenEnvironment.stopManagingThread();
}
}

AmqpAppender

  • 将日志发送到mq中,再由消费者推送到Logstash

启用Appender
appender-ref 表示启用哪些appender

 <!-- root级别 DEBUG -->
<root level="DEBUG">
<appender-ref ref="STDOUT" />
<appender-ref ref="ASYNC_DEFAULT" />
<if condition='property("sentryEnable").contains("true")'>
<then>
<appender-ref ref="Sentry" />
</then>
</if>
<if condition='property("elkEnable").contains("true")'>
<then>
<appender-ref ref="ELK" />
</then>
</if>
</root>

LayoutBase
Layout是logback中负责把日志事件转换成成字符串的组件,可以理解为日志中需要哪些字段,可以通过layout来做.
可以自定义自己的layout


doLayout
主要负责组装需要上报的信息,比如一些自定义的requestId,reqKey 等

  • 继承LayoutBase<ILoggingEvent>
  • 重写doLayout方法


这里配置自定义的layout之后,项目中每个log.info等方法都会经过这个方法组装上报信息

原文地址:https://www.cnblogs.com/xwx20160804/p/11719456.html