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
@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
<!-- 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