JS写日志到本地,查看本地日志<一>

2017-03-21

32

0

需求:自助终端出现错误问题不好分析,需要记录错误日志和在前端展示错误日志。

硬件环境:windowxp 浏览器IE8

分析:

1、JS日志的写入

2、一键设置IE浏览器的安全设置

3、安装ACTIVE控件

JS代码分析:

1、日志写入的目录结构。如:C:\jslog\201703\20170321\sys.log

2、日志的分类:系统日志,硬件日志,打印日志,异常日志。

3、日志的读取,读取的方式和展示的方式。

公共JS代码,包含写入方法和读取方法。如下:

/**
 * 
 * 硬件驱动控制单元对象ID

 * Windows下

 * classid="clsid:BBB858BC-90D3-4580-BFB6-2FD8FB4F5AF0"
 * 
 * Linux下

 * type="application/TTDriverMgr-plugin"

 * 
 * 功能描述:
 */

/**
 * 替换所有字串
 * 
 * @param pattern
 *            查找的字串
 * @param repl
 *            替换的字串
 * @return
 */

String.prototype.replaceAll = function(pattern, repl) {
	var reg = new RegExp(pattern, "g");
	return this.replace(reg, repl);
}
/**
 * 格式化日期
 * 
 * @param str
 *            yyyy MM dd hh mm ss 年月日时分秒
 * @return
 */
Date.prototype.format = function(str) {
	function addZero(num) {
		if (num >= 0 && num <= 9)
			num = "0" + num;
		return num;
	}

	str = str.replaceAll("yyyy", this.getFullYear());
	str = str.replaceAll("MM", addZero((this.getMonth() + 1)));
	str = str.replaceAll("dd", addZero(this.getDate()));
	str = str.replaceAll("hh", addZero(this.getHours()));
	str = str.replaceAll("mm", addZero(this.getMinutes()));
	str = str.replaceAll("ss", addZero(this.getSeconds()));

	return str;
}
// -------------------------------public----------------------------------
/**
 * 文件描述:针对公共变量以及日志写入封装
 * 
 * 
 */
var aiDrvObj; // 写日志对象 
var aiftp = document.all.AILKUpdateCom;
aiDrvObj = aiftp;
var LogPath = "C:/AilkClient/";// ailk log地址

function WriteToFile(filename, sText) { 
	sText = sText.replaceAll("\t", "     "); 
	var iRet = aiDrvObj.writeLog(filename, sText);
	return iRet;
}

// FIXME:日志操作
function getLogDir(date) {
	date = date.replaceAll("-", "");
	// 对应目录文件 log/yyyyMM/yyyyMMdd/filename_yyyyMMdd.log
	var file = LogPath + "log/" + date.substr(0, 6) + "/" + date;
	file = file.replaceAll("/", "\\");
	return file;
}
/**
 * 日志路径
 * 
 * @param {}
 *            filename
 * @param {}
 *            date yyyy-mm-dd
 */
function getLogURL(filename, date) {
	date = date.replaceAll("-", "");
	// 对应目录文件 log/yyyyMM/yyyyMMdd/filename_yyyyMMdd.log
	var file = getLogDir(date) + "\\" + filename + "_" + date + ".log"
	return file;
}

/**
 * 简单封装日志
 * 
 * @param filename
 *            [文件夹名/]文件名
 * @param sText
 *            内容,写入时自动在行首加上日期时间
 */
function Log(filename, sText) {
	var myDate = new Date();
	var date = myDate.format("yyyyMMdd");

	// 所有日志文件 log/yyyyMM/yyyyMMdd/All_yyyyMMdd.log
	var allFile = getLogURL("All", date);

	// 对应文件 log/yyyyMM/yyyyMMdd/filename_yyyyMMdd.log
	var file = getLogURL(filename, date);

	// 时间 yyyy-MM-dd hh:mm:ss
	var time = myDate.format("yyyy-MM-dd hh:mm:ss") + "\t";
	WriteToFile(allFile, time + sText);// 记录全部日志
	WriteToFile(file, time + sText);// 分文件记录日志
}

//--------------------------------------各硬件部件日志start-------------------------
/**
 * 系统日志
 * 
 * @param sText
 */
function SysLog(sText) {
	Log("Sys", sText);
}
/**
 * 结算日志
 * 
 * @param sText
 */
function SettlementLog(sText) {
	Log("Settlement", sText);
}
/**
 * 缴费明细日志
 * 
 * @param sText
 */
function MonitorPay(sText) {
	Log("MonitorPay", sText);
}
/**
 * 银联日志
 * 
 * @param sText
 */
function UnionPayLog(sText) {
	Log("UnionPayHardware", sText);
}
/**
 * 键盘日志
 * 
 * @param sText
 */
function KBLog(sText) {
	Log("Keyboard", sText);
}
/**
 * 读卡器日志
 * 
 * @param sText
 */
function CRLog(sText) {
	Log("ReadCard", sText);
}
/**
 * 清单打印机日志
 * 
 * @param sText
 */
function RPLog(sText) {
	Log("ListPrint", sText);
}
/**
 * 发票打印机日志
 * 
 * @param sText
 */
function IPLog(sText) {
	Log("InvoicePrinter", sText);
}
/**
 * 纸币器日志
 * 
 * @param sText
 */
function CashLog(sText) {
	Log("CashHardware", sText);
}
/**
 * 身份证阅读器日志
 * 
 * @param sText
 */
function IDLog(sText) {
	Log("Identity", sText);
}
/**
 * SIM卡发卡器日志
 * 
 * @param sText
 */
function SIMLog(sText) {
	Log("SIM", sText);
}
/**
 * UPS日志
 * 
 * @param sText
 */
function UPSLog(sText) {
	Log("UPS", sText);
}
//--------------------------------------各硬件部件日志end-------------------------
function ReadFromFile(filename) {
	var iRet = aiDrvObj.readLog(filename);
	return iRet;
}

/**
 * 取日志
 * 
 * @param {}
 *            filename 如Pay/Pay形式 表示读log/Pay/Pay_yyyyMMdd.log文件
 * @param {}
 *            date yyyy-mm-dd格式
 * @return {}
 */
function getLog(filename, date) {
	var file = getLogURL(filename, date);
	// alert(file)
	return ReadFromFile(file);
}
function getFormatLog(tag, filename, date) {
	// return "2013-04-07
	// 12:34:22张三13808882267100成功ASM0480000011304071234320ASM048000001130407123432"
	var txt = getLog(filename, date);
	var rt = "";
	if (txt.length > 0) {
		var arr = txt.split("\r\n");
		var length = tag.length;
		for (var i = 0; i < arr.length - 1; i++) {
			var rowArr = String(arr[i]).split("     ");
			rt += "";
			for (var j = 0; j < length && j < rowArr.length - 1; j++) {
				rt += "<" + tag[j] + ">" + rowArr[j] + "";
			}
			rt += "";
		}
	}
	return rt;
}
function getPayLog(date) {
	return getFormatLog(["time", "name", "phone", "paymoney", "status", "no",
					"clientPaylogNo"], "Pay", date);
}
function setPayLog(name, phone, paymoney, status, no, clientPaylogNo) {
	Log("Pay", name + "\t" + phone + "\t" + paymoney + "\t" + status + "\t"
					+ no + "\t" + clientPaylogNo + "\t");
}
function setCashLog(clientPaylogNo, name, phone, paymoney) {
	Log("Cash", clientPaylogNo + "\t" + name + "\t" + phone + "\t" + paymoney
					+ "\t");
}
function getCashLog(date) {
	return getFormatLog(
			["time", "clientPaylogNo", "name", "phone", "paymoney"], "Cash",
			date);
}

在HTML/JSP页面引入上面的JS,然后增加如下代码:

 

CODEBASE为AILKUpdateCom.cab的目录,放在项目中。我的就放在JS目录。

然后,调用JS方法加入日志:

 

页面加载的时,会通知你安装AILKUpdateCom.cab,没有认证签名,需要对IE进行设置。

如下:

IE工具栏-->工具-->Internet选项-->安全-->自定义级别-->ActiveX 控件和插件,都选择启用。

如图:

页面加载,安装控件,日志就生成成功了。

 

 

发表评论

全部评论:0条

houzhe11

JAVA从业者