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类。

3. logback-core

logback-core模块是logback的基础。下面讲解一下可以直接使用的appender。

1.logback-core模块中的appender

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

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

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

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>标签中创建以属性名为标签名的标签,并为这些标签进行配置。

注意:<appender>中不同的class属性值表明使用不同的目的地,因此会有不同的参数,从而表现出在配置文件中的标签有所差异。

3.FileAppender讲解

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

这些属性是需要配置的,因此我们可以通过在xml配置文件中的<appender>标签中创建以属性名为标签名的标签,并为这些标签进行配置。

注意:<appender>中不同的class属性值表明使用不同的目的地,因此会有不同的参数,从而表现出在配置文件中的标签有所差异。

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>标签中创建以属性名为标签名的标签,并为这些标签进行配置。

注意:<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。

 

java日志框架系列(5):logback框架appender详解的更多相关文章

  1. Java容器解析系列(6) Queue Deque AbstractQueue 详解

    首先我们来看一下Queue接口: /** * @since 1.5 */ public interface Queue<E> extends Collection<E> { / ...

  2. Java容器解析系列(4) ArrayList Vector Stack 详解

    ArrayList 这里关于ArrayList本来都读了一遍源码,并且写了一些了,突然在原来的笔记里面发现了收藏的有相关博客,大致看了一下,这些就是我要写的(╹▽╹),而且估计我还写不到博主的水平,这 ...

  3. 深入理解JAVA I/O系列三:字符流详解

    字符流为何存在 既然字节流提供了能够处理任何类型的输入/输出操作的功能,那为什么还要存在字符流呢?容我慢慢道来,字节流不能直接操作Unicode字符,因为一个字符有两个字节,字节流一次只能操作一个字节 ...

  4. 《手把手教你》系列基础篇(八十三)-java+ selenium自动化测试-框架设计基础-TestNG测试报告-下篇(详解教程)

    1.简介 其实前边好像简单的提到过测试报告,宏哥觉得这部分比较重要,就着重讲解和介绍一下.报告是任何测试执行中最重要的部分,因为它可以帮助用户了解测试执行的结果.失败点和失败原因.另一方面,日志记录对 ...

  5. logback 常用配置详解<appender>

    logback 常用配置详解 <appender> <appender>: <appender>是<configuration>的子节点,是负责写日志的 ...

  6. logback 常用配置详解(二) <appender>

    logback 常用配置详解(二) <appender> <appender>: <appender>是<configuration>的子节点,是负责写 ...

  7. 【山外笔记-工具框架】iperf3网络性能测试工具详解教程

    [山外笔记-工具框架]iperf3网络性能测试工具详解教程   本文下载链接 [学习笔记]iperf3网络性能测试工具.pdf 网络性能评估主要是监测网络带宽的使用率,将网络带宽利用最大化是保证网络性 ...

  8. Farseer.net轻量级开源框架 入门篇:添加数据详解

    导航 目   录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 入门篇: 分类逻辑层 下一篇:Farseer.net轻量级开源框架 入门篇: 修改数据详解 ...

  9. Farseer.net轻量级开源框架 入门篇:修改数据详解

    导航 目   录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 入门篇: 添加数据详解 下一篇:Farseer.net轻量级开源框架 入门篇: 删除数据详解 ...

  10. Farseer.net轻量级开源框架 入门篇:删除数据详解

    导航 目   录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 入门篇: 修改数据详解 下一篇:Farseer.net轻量级开源框架 入门篇: 查询数据详解 ...

随机推荐

  1. windows使用强大的wget工具

    原文链接:https://www.cnblogs.com/hzdx/p/6432161.html wget下载地址:http://www.interlog.com/~tcharron/wgetwin. ...

  2. Arrays.binarySearch采坑记录及用法

    今天在生产环境联调的时候,发现一个很奇怪的问题,明明测试数据正确,结果却是结果不通过,经过debug查询到原来是Arrays.binarySearch用法错误,记录一下,避免后续再次犯错 具体测试如下 ...

  3. Tkinter 之Menu菜单标签

    一.参数说明 语法 作用 MenuBar = tk.Menu(window) 创建一个菜单栏 fileBar = tk.Menu(MenuBar, tearoff=0) 创建一个菜单项,不分窗. Me ...

  4. Choosing a fast unique identifier (UUID) for Lucene——有时间再看下

    Most search applications using Apache Lucene assign a unique id, or primary key, to each indexed doc ...

  5. HbuilderX

    HBuilderX入门教程 HX是轻量编辑器和强大IDE的完美结合体.敏捷的性能,清爽的界面,强大的功能和于一身. 本文档面向入门用户,建议初学者仔细研读. 介绍 执着于更快一步的理念,hx的左侧项目 ...

  6. sklearn中的弹性网函数 ElasticNet

    语法:  ElasticNet(self, alpha=1.0, l1_ratio=0.5, fit_intercept=True, normalize=False, precompute=False ...

  7. oracle中的cursor

    游标是SQL的一个内存工作区,由系统或用户以变量的形式定义.游标的作用就是用于临时存储从数据库中提取的数据块.在某些情况下,需要把数据从存放在磁盘的表中调到计算机内存中进行处理,最后将处理结果显示出来 ...

  8. P1964 【mc生存】卖东西

    P1964 [mc生存]卖东西 题解 很简单, 暴力 注意一个小点就好 代码 #include<iostream> #include<cstdio> #include<c ...

  9. <JavaScript>尺寸类样式的获取

    尺寸类样式的获取 offsetHeight HTMLElement.offsetHeight 是一个只读属性,它返回该元素的像素高度,高度包含该元素的垂直内边距和边框,且是一个整数.(content+ ...

  10. Android:状态栏禁用时蓝牙多文件传输弹窗及进度显示

    一.蓝牙文件传输弹窗 Android原生蓝牙传输文件时,会弹出蓝牙文件接收的确认框且默认是以notification的形式显示在状态栏,当用户点击之后才会弹出一个dialog.那么当状态栏被禁用时,如 ...