基于Log4j改进日志存储应用研究.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于Log4j改进日志存储应用研究

基于Log4j改进日志存储应用研究   摘要:通过对Log4j提供的WriterAppender类的继承,利用管道通信机制处理来自Appender的日志输出,并将形成的日志对象缓存于一个基于观察者模式构建的缓存组件中。介绍了组件的结构和实现,结合Spring、Hibernate以及Quartz等开源组件可以应用在更广泛的信息系统日志记录和审计中。   关键词:Log4j;组件结构;管道通信;日志存储   中图分类号:TP274+.1 文献标识码:A文章编号:1672-7800(2011)01-0060-02         作者简介:郭节(1972-),女,河南郑州人,郑州市经济贸易学校讲师,研究方向为计算机应用。1系统模型    Log4j 环境包括3个主要组件:①logger(日志记录器):控制要启用或禁用哪些日志记录语句。可以对日志记录器指定如下级别: ALL 、 DEBUG 、 INFO 、 WARN 、 ERROR , FATA或 OFF;②layout(布局):根据用户的愿望格式化日志记录请求;③appender:向目的地发送格式化的输出。    实现自定义输出的关键在于Appender,因为该类的实现定义了目的地的输出,同时它也决定了输出的性能问题,例如可以设置合适的缓冲区降低频繁的IO请求所造成的性能下降问题。扩展后的日志存储系统的基本结构如图1所示。   图1扩展后的日志存储系统的基本结构    在图1中,利用管道通信机制将一个日志处理器LogProcessor组件和一个Appender连接起来,这是系统的关键。同时,利用一个自定义的Cache缓存需要存储的日志对象,Job的作用则是利用Quartz的定时特点定时将Cache中的日志对象取出保存到数据库中。   2关键实现   2.1Appender的设计    Appender的作用在于提供接收Logger传送的信息,实现向目的地发送需要处理的日志信息,可以通过继承org.apache.log4j.WriterAppender类。   public class MyAppender extends WriterAppender{    private String MessageRegex; //用于获得配置文件中定义的日志信息的分割模式    public String getMessageRegex() {    return MessageRegex;    }    public void setMessageRegex(String messageRegex) {    MessageRegex = messageRegex;    }   }    2.2日志处理器的设计    日志处理器通过管道通信机制和Appender建立连接,输出到Appender的日志会通过管道送到日志处理器。   public final class LogProcessor extends Thread{    private boolean working=true;//线程工作状态    PipedReader reader;    LogProcessor processor;    private LogProcessor (PipedReader reader) {    this.reader = reader;    }    public static LogProcessor getInstace(PipedReader reader){    if(processor ==null){    if(reader!=null){    processor =new LogProcessor (reader);    }    }    return processor;    }    public void run() {    Scanner scanner = new Scanner(reader);    while (scanner.hasNext()) {    //从管道中读取日志信息    String logInfoString = scanner.nextLine();    YourLoggerEvent evt=null;//声明一个自定义的日志对象    //这里插入对日志信息进行解析的代码,形成自定义的日志对象    LogCache.add(evt);//将日志存入缓冲区    }    }   }    这里将LogProcessor设计成为一个单态类的目的主要是为了保证系统只有一个日志处理线程,当然也可以根据自己的

文档评论(0)

317960162 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档