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

  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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值