java日志框架系列(5):logback框架appender详解

1.appender

1.什么是appender

Appender 是负责写记录事件的组件。 Appender 必须实现接口“ch.qos.logback.core.Appender”。该接口的重要方法总结以下: 

 

 

 

 2.AppenderBase

public synchronized void doAppend(E eventObject) {
// prevent re-entry.
if (guard) {
return; }
try {
guard = true;
if (!this.started) {
if (statusRepeatCount++ < ALLOWED_REPEATS) {
addStatus(new WarnStatus(
"Attempted to append to non started appender ["
+ name + "].", this));
}
return; }
if (getFilterChainDecision(eventObject) == FilterReply.DENY) 
{
return; }
// ok, we now invoke derived class' implementation of append
this.append(eventObject);
} catch (Exception e) {
if (exceptionCount++ < ALLOWED_REPEATS) {
addError("Appender [" + name + "] failed to append.", e);
}
} finally {
guard = false; } }

经过代码能够知道AppenderBase类是的doAppender()是同步线程安全的;并非全部时候都须要同步,所以当不须要同步的时候可使用UnsynchronizedAppenderBase类。java

3. logback-core

logback-core模块是logback的基础。下面讲解一下能够直接使用的appender。安全

1.logback-core模块中的appender

logback-core模块中的appender种类:OutputStreamAppender、ConsoleAppender、FileAppender、RollingFileAppender。网络

你有没有发现:logback-core中的appender的目的地都是本地啊,那有没有能够发送到网络上的appender呀,固然有,在logback-classic模块中,下一节介绍。app

这些appender之间的关系以下所示:this

 

1.OutputStreamAppender讲解

OutputStreamAppender 把事件添加到 java.io.OutputStream该类提供其余 appender 所需的基本服务。用户一般不直接实例化 OutputStreamAppender 对象。
因为 java.io.OutputStream通常没法被方便地映射到字符串,因此没法在配置文件里指定目标 OutputStream 对象。简而言之,你 不能在配置文件里配置 OutputStreamAppender。但这不是说 OutputStreamAppender没有配置属性。它的属性以下:

 2.ConsoleAppender讲解

ConsoleAppender 把事件添加到控制台,更准确地说是 System.out 或 System.err,默认为前者。ConsoleAppender 按照用户指定的 encoder 对事件进行格式化。

 这些属性是须要配置的,所以咱们能够经过在xml配置文件中的<appender>标签中建立以属性名为标签名的标签,并为这些标签进行配置。spa

注意<appender>中不一样的class属性值代表使用不一样的目的地,所以会有不一样的参数,从而表现出在配置文件中的标签有所差别线程

 3.FileAppender讲解

FileAppender 是 OutputStreamAppender 的子类, 把记录事件添加到文件。目标文件经过File 选项指定。若是文件已经存在,则 根据 Append 属性追加或清空文件

 

这些属性是须要配置的,所以咱们能够经过在xml配置文件中的<appender>标签中建立以属性名为标签名的标签,并为这些标签进行配置。3d

注意<appender>中不一样的class属性值代表使用不一样的目的地,所以会有不一样的参数,从而表现出在配置文件中的标签有所差别。code

 4.RollingFIleAppender讲解

RollingFileAppender 继承 FileAppender,可以滚动记录文件。
滚动记录文件:RollingFileAppender能先记录到文件“log.txt”,而后当符合某个条件时,变成记录到其余文件。
1.实现滚动记录原理
RollingFileAppender有两个重要组件,RollingPolicy、TriggerPolicy。
RollingPolicy:负责滚动
TriggerPolicy:决定是否以及什么时候滚动。
RollingFileAppender要想实现滚动功能,必须同时设置具体的RollingPolicy类与具体的TriggerPolicy类。若是某个类A实现了RollingPolicy与TriggerPolicy,那么只须要设置类A就能够了。
rollingPolicy属性值的类型有:FixedWindowRollingPolicy类、TimeBasedRollingPolicy类(经常使用)。FixedWindowRollingPolicy,TimeBasedRollingPolicy 支持自动压缩文件

这些属性是须要配置的,所以咱们能够经过在xml配置文件中的<appender>标签中建立以属性名为标签名的标签,并为这些标签进行配置。xml

注意<appender>中不一样的class属性值代表使用不一样的目的地,所以会有不一样的参数,从而表现出在配置文件中的标签有所差别。

1.最受欢迎的滚动策略TimeBaseRollingPolicy
TimeBaseRollingPolicy:最流行的滚动策略。根据时间来制定滚动策略。因为TimeBaseRollingPolicy实现了RollingPolicy接口和TriggeringPolicy接口,所以TimeBaseRollingPolicy即负责滚动也负责触发条件。
 属性:fileNamePattern(必须有)和maxHistory(可选的)。

 

 下面讲解一下fileNamePattern的部分值及做用:

注意:全部“\”和“/”都被解释为目录分隔符。任何须要的目录都会被建立。因此你能够轻松地把记录文件放到不一样的目录。 

 

4.logback-classic

 

 

  在logback-classic模块中也存在一些appender,而且这些appender的目的地不是本地。下面详细了解一下这些appender。

logback-classic模块中的appender分类:SocketAppender、DBAppender、SMTPAppender、SyslogAppender、SiftingAppender以及基于JMS的两种Appender(JMSTopicAppender和JMSQueueAppender,他们继承自JMSAppenderBase类);提供了总共7种appender;另外还能够自定义appender,须要经过继承AppenderBase来实现自定义的appender。

相关文章
相关标签/搜索