interface LogEntry {
  data: any
  time: Date
}
export class PersistantLog {
  //最大条数
  maxEntries = 3000;
  isEnabled = false;
  name = "default_log";
  localStorage = window.localStorage;
  entries: LogEntry[] = JSON.parse(this.localStorage.getItem(this.name));
  constructor() {
    this.isEnabled = true;
  }
 
  public log(info: any) {
    if (!this.isEnabled) return;
    this.entries.push({
      time: new Date(),
      data: info
    })
    this.save();
  }
 
  public enable() {
    this.isEnabled = true;
  }
 
  private save() {
    this.entries = this.entries.slice(-this.maxEntries)
    let data = JSON.stringify(this.entries)
    this.localStorage.setItem(this.name, data)
  }
 
  public clear() {
    this.localStorage.removeItem(this.name);
  }
  
  private getEntries() {
    return this.entries
  }
 
  public exportLog(exportFileName: string) {
    let resultStr = this.localStorage.getItem(this.name)
    //将文本或者JS字符串信息借助Blob转换成二进制,然后,
    //作为<a>元素的href属性,配合download属性,实现下载
    if ("download" in document.createElement("a")) {
      let eleLink = document.createElement("a")
      eleLink.download = exportFileName + ".json"
      eleLink.style.display = "none"
      let blob = new Blob([resultStr])
      eleLink.href = URL.createObjectURL(blob)
      //兼容firefox,元素添加到页面才能触发点击
      document.body.appendChild(eleLink)
      eleLink.click()
      document.body.removeChild(eleLink)
    }
  }
}

前端打印日志到localStroge并导出的更多相关文章

  1. vue+sentry 前端异常日志监控

    敲代码最糟心不过遇到自己和测试的环境都OK, 客户使用有各种各样还复现不了的问题,被逼无奈只能走到这一步:前端异常日志监控! vue官方文档如下推荐: 就是说, vue有错误机制处理errorHand ...

  2. Xcode8中处理打印日志的配置

    Xcode8中处理打印日志的配置

  3. Mybatis框架基于映射文件和配置文件的方式,实现增删改查,可以打印日志信息

    首先在lib下导入: 与打印日志信息有关的架包 log4j-1.2.16.jar mybatis架包:mybatis-3.1.1.jar 连接数据库的架包:mysql-connector-java-5 ...

  4. Log打印日志遇到的问题

    Log日志打印出现空指针问题 AndroidRuntime(372): Caused by: java.lang.NullPointerException: println needs a messa ...

  5. 重写NSLog,Debug模式下打印日志和当前行数

    在pch文件中加入以下命令,NSLog在真机测试中就不会打印了 //重写NSLog,Debug模式下打印日志和当前行数 #if DEBUG #define NSLog(FORMAT, ...) fpr ...

  6. 基于window.onerror事件 建立前端错误日志

    QA不是万能的,用户的浏览环境非常复杂,很多情况无法靠测试用例去覆盖,所以最好建立一个前端错误日志,在真实用户端收集bug. try&catch是一个捕获前端错误的常见方法,比如: { //给 ...

  7. android112 c代码打印日志,c反编译调用java

    activity: package com.itheima.ccalljava; import android.os.Bundle; import android.app.Activity; impo ...

  8. ruby脚本打印日志到rspec的报告文件中

    在通过ruby+webdriver+rspec做自动化测试的时候,为了便于观察用例执行情况,我基本上都会用 rspec XX.rb --format doc -o result.log 如果遇到失败的 ...

  9. Log4j配置的经典总结,打印日志文件,日志存库

        一.介绍 Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制 日志信息输送的目的地是控制台.文件.GUI组件.甚至是套接口服务 器.NT的事件记录器.UNIX Sy ...

随机推荐

  1. surface知识点

    SurfaceView和TextureView 在学习直播的过程遇到一个问题:连麦场景下能够支持大小窗口切换(即小窗口变大,大窗口变小),大窗口是TextView(用于拉流显示),而小窗口是Surfa ...

  2. 理解Linux系统中的load average(图文版)

    本文转自:http://heipark.iteye.com/blog/1340384 一.什么是load average? linux系统中的Load对当前CPU工作量的度量 (WikiPedia: ...

  3. linux 服务器部署的web项目存入数据库的时间不正确

    在linux获取当前时间 date 获取的时间是正常的 ----- java写了个测试类 public class TestDate { public static void main(String[ ...

  4. .net Core 发布并布署到Iis

               配置 Program.cs代码 namespace WebApplication8 { public class Program { public static void Mai ...

  5. HeyWeGo第三周项目总结

    HeyWeGo第三周项目总结 项目进展 第三周的计划是:将收集到的资料和代码,进行汇总并且分工后开始开始撰写游戏代码与测试代码. 本周我们已经开始编写了自己负责部分的代码. 按照我们的计划,本周我们完 ...

  6. JS封装简单后代选择器

    大概思路是这样的:通过判断传过来的参数是什么类型,如果是对象,那这里就是this(因为封装是自己用的,肯定不会随便乱传一个对象过来),如果是一个函数(匿名函数),那就是Dom加载(这里先不讲),如果是 ...

  7. maven3官网下载地址

    maven3官网下载地址:https://archive.apache.org/dist/maven/maven-3/

  8. CCleaner如何禁用开机自动启动

    https://forum.piriform.com/topic/42073-ccleaner-starts-on-startup/ 在options-->setting里面选择开机不启动 在O ...

  9. 【软件位置】Linux查看软件安装的位置

    如果我们在Linux 系统上安装了某个软件,我们可以通过如下的三种方式来确定. 一.        Which 命令 Shell 的which 命令可以找出相关命令是否已经在搜索路径中. 如: [ro ...

  10. Gym - 100712D Alternating Strings

    http://codeforces.com/gym/100712/attachments 题意: 给出一个01串,现在要切割这个01串,使得每个子串长度都不大于k,并且每个子串不能01交替出现,单个字 ...