设为首页 收藏本站
查看: 1102|回复: 0

[经验分享] 自定义日志阅读器——包括了一个load取Tomcat日志的分析器

[复制链接]
发表于 2015-8-6 11:47:30 | 显示全部楼层 |阅读模式
  最近在写往公司产品里添加Tomcat适配器,以支持Tomcat。有一些功能需要摘取到Tomcat的部分日志。没有合适的工具,也不想去网上找了,就自己写了一个。
  简单的画了一下设计方案:
DSC0000.png
  
  下面直接上代码了:
  日志阅读器:


DSC0001.gif DSC0002.gif


  1 package com.fjn.tools.log.reader;
  2
  3 import java.io.File;
  4 import java.util.LinkedList;
  5 import java.util.List;
  6 import java.util.Scanner;
  7
  8 import com.fjn.tools.log.reader.parser.CatalinaSimpleFormatterParser;
  9
10 public class LogReader {
11     private String logFile;
12     private List logFilterChain = new LinkedList();
13     private final ContinueRead continueRead = new ContinueRead();
14     private LogParser parser;
15     private final boolean doFilter(LogRecord record) {
16         for (LogFilter filter : logFilterChain) {
17             if (!filter.accept(record)) {
18                 return false;
19             }
20         }
21         return true;
22     }
23
24     public void addFilter(LogFilter filter) {
25         if(filter!=null){
26             logFilterChain.add(filter);
27         }
28     }
29
30     public final String readLogRecords(String startTime, String endTime) {
31         if (parser == null) {
32             return null;
33         }
34         StringBuilder buff = new StringBuilder();
35         Scanner scanner = null;
36         
37         try {
38             scanner = new Scanner(new File(logFile));
39            
40
41             NewLine newLine = null;
42             if (startTime != null) {
43                 StartTimeFilter filter = new StartTimeFilter();
44                 filter.startTime = startTime;
45                 addFilter(filter);
46             }
47             if (endTime != null) {
48                 EndTimeFilter filter = new EndTimeFilter();
49                 filter.endTime = endTime;
50                 filter.continueRead = this.continueRead;
51                 addFilter(filter);
52             }
53             while (scanner.hasNextLine() && continueRead.value) {
54                 LogRecord record = null;
55                 if (newLine == null) {
56                     newLine = new NewLine();
57                 }
58                 if (!newLine.hasGetNewLine) {
59                     newLine.line = scanner.nextLine();
60                     newLine.hasGetNewLine = true;
61                 }
62                 record = parser.getLogRecord(scanner, newLine, continueRead);
63                 if (record != null) {
64                     if (doFilter(record)) {
65                         buff.append(record.toString());
66                     }
67                 }
68             }
69         } catch (Exception ex) {
70             // Ignore it
71         } finally {
72             if (scanner != null) {
73                 scanner.close();
74             }
75         }
76         return buff.toString();
77     }
78
79     public static interface LogParser {
80         public LogRecord getLogRecord(Scanner scanner, NewLine newLine,
81                 ContinueRead continueRead);
82     }
83
84     public static interface LogFilter {
85         public boolean accept(LogRecord record);
86     }
87
88     public static abstract class LogRecord {
89         public String prefix;
90         public String message;
91         public String threadStack;
92         public String datetime;
93     }
94
95     public static class NewLine {
96         public boolean hasGetNewLine = false;
97         public String line = "";
98     }
99
100     public static class ContinueRead {
101         public boolean value = true;
102     }
103
104     private class StartTimeFilter implements LogFilter {
105         private String startTime;
106
107         @Override
108         public boolean accept(LogRecord record) {
109             if (startTime == null) {
110                 return true;
111             }
112
113             if (startTime.compareTo(record.datetime)

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-94785-1-1.html 上篇帖子: Tomcat源码解读系列(一)——server.xml文件的配置 下篇帖子: Target runtime Tomcat 7.0 is not defined
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表