zoukankan      html  css  js  c++  java
  • 2018/2/16 解析Logback的AppenderBase源码,并举一反三的实现Logback扩展功能的思路,以及它的实际业务应用场景

    在学习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之类,实在是太麻烦了,但如果我们自己扩展下,就单单我们自己的服务来说,只需要复制粘贴我们自己写好的工具类,然后配置一下即可;

  • 相关阅读:
    excel上传和下载
    SublimeText快捷键大全(附GIF演示图)
    JS求多个数组的重复数据
    js各种宽高(3)
    js各种宽高(2)
    js各种宽高(1)
    echarts简单使用案例
    js小技巧
    原生jdbc执行存储过程
    Cron和Spring定时任务
  • 原文地址:https://www.cnblogs.com/yangfeiORfeiyang/p/8450073.html
Copyright © 2011-2022 走看看