Java测试序列化数据时的计数策略

来源:互联网 发布:办公室平台软件 编辑:程序博客网 时间:2024/06/08 10:07

近日测试中遇到一个需求,要使用程序不断地去监测指定的服务组件是否正在运行,一分钟检测一次,如果发现异常,就要将异常的信息捕获出来,然后记录到日志中,供开发人员排查。

可是在执行的过程中,发现一个问题,产生的日志在记入文件的时候,没有明确的行列标记,非常不便于操作,而且日志是追加模式的,在分类的情况下,要按分类查找更加困难。比如:

总共产生了1W条日志,info级别的8000条,error级别的500条,warning级别1500条,怎么样才能很好的组织这些数据,便于找出BUG,便于筛选呢?

我用了两套序数操纵这些数据,一套序数是每个类别的日志,有一个自己的序号,同时,还有一个全局的日志序号,这种情况下,不同的业务单元中产生的日志,只要推送到我这个单一的进程中,就能实现全局排序记录,局部也有序列,并且保存到了同一个文件中,便于集中处理。

实现如下:

/** *  */package com;/** * @author Administrator * */public class HelloWorld {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubMyLog log1 = new MyLog();MyLog log2 = new MyLog();MyLog log3 = new MyLog();MyLog log4 = new MyLog();MyLog log5 = new MyLog();log1.write(1, "running");log1.write(2, "reopen");log2.write(1, "starting");log2.write(3, "crashed");log2.write(1, "resume");log3.write(1, "stoped");log4.write(1, "prompt");log5.write(2, "network failed");log5.write(1, "network normal");log5.write(2, "thread crash");log5.write(3, "connect failed");}}class MyLog {private static int nSerialNo = 0;// 0是info级别,1是warning级别,2是error级别final int INFO_TYPE = 0;final int WARNNING_TYPE = 1;final int ERROR_TYPE = 2;static int nInfoNo = 0;// 局部序号static int nWarnningNo = 0;static int nErrorNo = 0;private int nGolobalNo = 0;// 全局序号private String strMsg = "";// 日志消息public void write(int type, String msg) {strMsg = msg;nGolobalNo = (++nSerialNo);// 0是info级别,1是warning级别,2是error级别switch (type) {case INFO_TYPE:System.out.println("Log[info][" + nGolobalNo + "]" + "[" + (++nInfoNo) + "]:" + strMsg);break;case WARNNING_TYPE:System.out.println("Log[warning][" + nGolobalNo + "]" + "[" + (++nWarnningNo) + "]:" + strMsg);break;case ERROR_TYPE:System.out.println("Log[error][" + nGolobalNo + "]" + "[" + (++nErrorNo) + "]:" + strMsg);break;default:System.out.println("Log[unknow][" + nGolobalNo + "]" + "[" + "-" + "]:" + strMsg);break;}}}


0 0
原创粉丝点击