在学习Logback的过程中,知道了它有一个可以将日志往第三方数据源写的功能,这个功能的实现就是这个AppenderBase类,不禁想看看它的源码。

下面是AppenderBase类的所有子类(也就是它的具体实现类,毕竟它本身是一个抽象类),它对于JMS的支持,以及SSL加密的支持倒没什么,但是它对于邮件服务的支持只有SMTP,就是说POP3和IMAP都不支持咯?

在同步的AppenderBase的里,我们可以通过CyclicBufferAppender类来对存储多条日志信息的CyclicBuffer的最大长度进行设置,它自己有一个默认的maxSize = 512,

当然了,这个肯定是通过配置文件进行设置的;

数组类型是个泛型

AppenderBase里唯一的抽象方法,配合方法名以及传入参数的变量名来看,应该就是当日志事件触发时会调用的方法;

看了一下SMTPAppenderBase(也就是对于SMTP支持的功能类)的源码,也验证了我这一想法;

还可以复写AppenderBase的start方法来进行一些初始化的工作;

发现了Appender里除了AppenderBase还有另一个实现类,看名字就是异步的AppenderBase咯;

点进它的实现类可以看到,用了一个BlockingQueue做了一个队列,并且设置了一个默认长度,256,也就是队列里可以放256个任务(不过应该是可以配置的),剩下的就会被丢弃,另外没有看到线程池的实现,奇怪了,放到哪里了呢?

举一反三一下,这里面LogBack对于第三方数据源的支持都是通过继承了AppenderBase和UnsynchronizedAppenderBase这两个抽象类通过复写它们的抽象方法appender来进行扩展的,所以我们完全也可以自己创建一个类继承AppenderBase或者UnsynchronizedAppenderBase来实现一些对其它数据源的扩展,比如redis,es,kafuka等等这些。

发散思考一下,在实际业务场景中,特别是微服务的情况下,如果我们要把一个服务的日志输出到另一个数据源,靠Logback的支持根本不够,因为它支持的服务实在是太少了,那么我们肯定需要在每台相应服务里都配置Logstash或者FileBeats之类,实在是太麻烦了,但如果我们自己扩展下,就单单我们自己的服务来说,只需要复制粘贴我们自己写好的工具类,然后配置一下即可;

2018/2/16 解析Logback的AppenderBase源码,并举一反三的实现Logback扩展功能的思路,以及它的实际业务应用场景的更多相关文章

  1. 我的书籍《深入解析Java编译器:源码剖析与实例详解》就要出版了

    一个十足的技术迷,2013年毕业,做过ERP.游戏.计算广告,在大公司呆过,但终究不满足仅对技术的应用,在2018年末离开了公司,全职写了一本书<深入解析Java编译器:源码剖析与实例详解> ...

  2. Spring PropertyResolver 占位符解析(二)源码分析

    Spring PropertyResolver 占位符解析(二)源码分析 Spring 系列目录(https://www.cnblogs.com/binarylei/p/10198698.html) ...

  3. Java源码阅读的真实体会(一种学习思路)

    Java源码阅读的真实体会(一种学习思路) 刚才在论坛不经意间,看到有关源码阅读的帖子.回想自己前几年,阅读源码那种兴奋和成就感(1),不禁又有一种激动. 源码阅读,我觉得最核心有三点:技术基础+强烈 ...

  4. Java源码阅读的真实体会(一种学习思路)【转】

    Java源码阅读的真实体会(一种学习思路)   刚才在论坛不经意间,看到有关源码阅读的帖子.回想自己前几年,阅读源码那种兴奋和成就感(1),不禁又有一种激动. 源码阅读,我觉得最核心有三点:技术基础+ ...

  5. Java 集合系列16之 HashSet详细介绍(源码解析)和使用示例

    概要 这一章,我们对HashSet进行学习.我们先对HashSet有个整体认识,然后再学习它的源码,最后再通过实例来学会使用HashSet.内容包括:第1部分 HashSet介绍第2部分 HashSe ...

  6. 【转】Java 集合系列16之 HashSet详细介绍(源码解析)和使用示例--不错

    原文网址:http://www.cnblogs.com/skywang12345/p/3311252.html 概要 这一章,我们对HashSet进行学习.我们先对HashSet有个整体认识,然后再学 ...

  7. Android 进阶16:IntentService 使用及源码解析

    It's time to start living the life you've only imagined. 读完本文你将了解: IntentService 简介 IntentService 源码 ...

  8. java 8 Hashmap深入解析 —— put get 方法源码

    每个java程序员都知道,HashMap是java中最重要的集合类之一,也是找工作面试中非常常见的考点,因为HashMap的实现本身确实蕴含了很多精妙的代码设计. 对于普通的程序员,可能仅仅能说出Ha ...

  9. Python解析Pcap包类源码学习

    0x1.前言 ​ 在现场取证遇到分析流量包的情况会比较少,虽然流量类设备原理是把数据都抓出来进行解析,很大一定程度上已经把人可以做的事情交给了机器自动完成. ​ 可用于PCAP包分析的软件比如科来,W ...

随机推荐

  1. YUM报错及解决办法

    [root@xuegod60 ~]# yum clean all Loaded plugins: product-id, refresh-packagekit, security, subscript ...

  2. DEV—【GridControl主从表】

    先附上效果图,不是想要这个效果的朋友就不用可以继续寻找了. DEV—GridControl制作主从表: (注:此例没有用到数据库,只是单纯的在内存中操作数据.) 写这一笔,是为了能更好的理解主从表,的 ...

  3. 掌握Spark机器学习库-08.7-决策树算法实现分类

    数据集 iris.data 数据集概览 代码 package org.apache.spark.examples.examplesforml import org.apache.spark.Spark ...

  4. R in action读书笔记(14)第十一章 中级绘图 之一:散点图(高能预警)

    第十一章中级绘图 本章内容: 二元变量和多元变量关系的可视化 绘制散点图和折线图 理解相关图 学习马赛克图和关联图 本章用到的函数有: plot hexbin ablines iplot scatte ...

  5. [Android]如何实现无限滚动的ListViw/GridView(翻译)

    ListView和GridView已经成为原生的Android应用实现中两个最流行的设计模式.目前,这些模式被大量的开发者使用,主要是因为他们是简单而直接的实现,同时他们提供了一个良好,整洁的用户体验 ...

  6. <jsp:include page="${pageContext.request.contextPath/index.jsp" ></jsp:include> 引发的错误

    路径引发的错误 如下使用项目路径对jsp页面进行获取,会报javax.servlet.ServletException: File "/web/dbwx/web/public/page_to ...

  7. C#在Excel的簡單操作--適用:與DB數據的簡單交互

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...

  8. 03HibernateJAVA类与数据库表映射配置

    HibernateJAVA类与数据库表映射配置

  9. CocoaPods 命令和使用

    CocoaPods 命令 pod init 在新建的项目根目录下运行该命令,为当前项目新建podfile文件. pod install 下载和配置 podfile里定义的项目依赖(不包括已经下载和配置 ...

  10. Java中数组在内存中的图解

    Java中的数组在内存中的图解,其实对于数组,还是比较熟悉的,平时用的也是很多的,在看数据结构与算法的极客时间专栏,最常用的10个数据结构:数组.链表.栈.队列.散列表.二叉树.堆.跳表.图.Trie ...