Javascript本地日志记录(限制文件个数,限时文件大小)

来源:互联网 发布:ubuntu 12 万m光口 编辑:程序博客网 时间:2024/06/05 18:29
  1. 使用FileSystemObject对象进行计算机文件系统的访问
  2. 适用于内部系统
  3. 使用大量页面脚本处理业务逻辑
  4. 需要调用第三方OCX、Applet控件
  5. 记录用户非提交式操作,记录本地日志方便发现问题。

myJs-log.js

var myJs.log = {  TYPE_RUN:'Run',//日志类型为运行  TYPE_ERR:'Err',//日志类型为错误  WRITE_RUN_FILE:'run.txt',//运行日志文件  WRITE_ERR_FILE:'err.txt',//错误日志文件  MAX_FILE_SIZE:100*1024*1024,//设置单日志最大为100MB  MAX_FILE_NUM:10,//日志文件最大数量10个  LOG_PATH:'C://Workspace',//日志路径  ipcc_fso:null,//ActiveXObject对象  /** 返回当前时间*/  GetYearMonth:function() {       var date= new Date();    return date.getFullYear() +       "-" +this.FmTimeNum(date.getMonth()+1) +      "-" + this.FmTimeNum(date.getDate()) +      " " + this.FmTimeNum(date.getHours()) +      ":" + this.FmTimeNum(date.getMinutes()) +      ":" + this.FmTimeNum(date.getSeconds());          },  /** 格式化时间数值(个位数补全加0显示)*/  FmTimeNum:function(num) {    return (num<10?"0":"") + num;  },  /** 日志(日志类型, 内容) */  printLog:function(type, logText) {    // 日志中记录当前时间    logText = this.GetYearMonth() +       " 【" + type + "】 " + logText;    // 记录日志的文件名称    var fileName = this.WRITE_RUN_FILE;    if(type==this.TYPE_ERR) {      fileName = this.WRITE_ERR_FILE;    }    this.writeFile(fileName, logText);// 写入  },  /** 写入文件(文件名, 写入内容) */  writeFile:function(fileName, logText) {    // 判断或创建日志目录    if(!this.ipcc_fso.FolderExists(this.LOG_PATH)){      this.ipcc_fso.CreateFolder(this.LOG_PATH);        }    // 日志文件全路径名称    var fileAllName = this.LOG_PATH + "//" + fileName;    // 判断日志文件是否存在    if(!this.ipcc_fso.FileExists(fileAllName)){      // 新建      var newfileStream =           this.ipcc_fso.CreateTextFile(fileAllName, true);      newfileStream.Close();    } else {      var fileObj = this.ipcc_fso.GetFile(fileAllName);      // 超过大小进行备份      if(fileObj.Size >= this.MAX_FILE_SIZE) {        var bakfileName=fileName+".1";        this.bakFile(fileName, bakfileName);        var newfileStream =           this.ipcc_fso.CreateTextFile(fileAllName, true);        newfileStream.Close();      }    }    var fileStream =       this.ipcc_fso.OpenTextFile(fileAllName, 8, false);    fileStream.WriteLine(logText);    fileStream.Close();  },  /** 备份文件名(原文件名称, 备份文件名称)*/  bakFile:function(sourceName, bakName){    var sourceAllName = this.LOG_PATH + "//" + sourceName;    var bakAllName = this.LOG_PATH + "//" + bakName;    //判断备份文件是否存在    if(this.ipcc_fso.FileExists(bakAllName)) {      //获取下一个备份文件      var nextBakName=this.getNextBakName(bakName);      var num = nextBakName.substr(nextBakName.length-2);      // 备份文件超过最大数量      if(parseInt(num) >= this.MAX_FILE_NUM){        this.ipcc_fso.DeleteFile(bakAllName, true);      } else {        this.bakFile(bakName, nextBakName);      }     }    var fileObj=spc.log.ipcc_fso.GetFile(sourceAllName);    fileObj.Name=bakName;   },  /** 获取下一个备份文件名(备份文件名称) */  getNextBakName:function(bakName){    var num = bakName.substr(bakName.length - 1);    var nextBakName = bakName.substr(0, bakName.length-1) +        (parseInt(num)+1);    return nextBakName;  }};/** 记录运行日志(内容) */function PrintRunLog(logText) {  myJs.log.printLog(myJs.log.TYPE_RUN, logText);}/** 记录错误日志(内容) */function PrintErrLog(logText) {  myJs.log.printLog(myJs.log.TYPE_ERR, logText);}$(function(){  try {    spc.log.ipcc_fso =       new ActiveXObject("Scripting.FileSystemObject");  } catch (e) {    alert('请开启IE写日志权限!');  }});

页面脚本直接应用此js,并直接使用方法PrintRunLog 和 PrintErrLog即可。

FileSystemObject详见 Scripting.FileSystemObject对象的详细技巧指南

0 0
原创粉丝点击