您的位置:首页 > 编程语言 > Java开发

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

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

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

总共产生了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 stub
		MyLog 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;
		}
	}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: