终于找到你!如何将前端console.log的日志保存成文件?

本篇文章来自一个需求,前端websocket会收到各种消息,但是调试的时候,我希望把websoekt推送过来的消息都保存到一个文件里,如果出问题的时候,我可以把这些消息的日志文件提交给后端开发区分析错误。但是在浏览器里,js一般是不能写文件的。鼠标另存为的方法也是不太好,因为会保存所有的console.log的输出。于是,终于找到这个debugout.js。

debugout.js的原理是将所有日志序列化后,保存到一个变量里。当然这个变量不会无限大,因为默认的最大日志限制是2500行,这个是可配置的。另外,debugout.js也支持在localStorage里存储日志的。

图片描述

debugout.js

一般来说,可以使用打开console面板,然后右键save,是可以将console.log输出的信息另存为log文件的。但是这就把所有的日志都包含进来了,如何只保存我想要的日志呢?

(调试输出)从您的日志中生成可以搜索,时间戳,下载等的文本文件。 参见下面的一些例子。

Debugout的log()接受任何类型的对象,包括函数。 Debugout不是一个猴子补丁,而是一个单独的记录类,你使用而不是控制台。

调试的一些亮点:

  • 在运行时或任何时间获取整个日志或尾部
  • 搜索并切片日志
  • 更好地了解可选时间戳的使用模式
  • 在一个地方切换实时日志记录(console.log)
  • 可选地将输出存储在window.localStorage中,并在每个会话中持续添加到同一个日志
  • 可选地,将日志上限为X个最新行以限制内存消耗

下图是使用downloadLog方法下载的日志文件。

图片描述

官方提供的demo示例,欢迎试玩。http://inorganik.github.io/de...

图片描述

使用

在脚本顶部的全局命名空间中创建一个新的调试对象,并使用debugout的日志方法替换所有控制台日志方法:

var bugout = new debugout();// instead of console.log('some object or string')
bugout.log('some object or string');

API

  • log() -像console.log(), 但是会自动存储
  • getLog() - 返回所有日志
  • tail(numLines) - 返回尾部执行行日志,默认100行
  • search(string) - 搜索日志
  • getSlice(start, numLines) - 日志切割
  • downloadLog() - 下载日志
  • clear() - 清空日志
  • determineType() - 一个更细粒度的typeof为您提供方便

可选配置

···
// log in real time (forwards to console.log)
self.realTimeLoggingOn = true;
// insert a timestamp in front of each log
self.useTimestamps = false;
// store the output using window.localStorage() and continuously add to the same log each session
self.useLocalStorage = false;
// set to false after you're done debugging to avoid the log eating up memory
self.recordLogs = true;
// to avoid the log eating up potentially endless memory
self.autoTrim = true;
// if autoTrim is true, this many most recent lines are saved
self.maxLines = 2500;
// how many lines tail() will retrieve
self.tailNumLines = 100;
// filename of log downloaded with downloadLog()
self.logFilename = 'log.txt';
// max recursion depth for logged objects
self.maxDepth = 25;
···

项目地址

https://github.com/inorganik/...

另外

我自己也模仿debugout.js写了一个日志保存的项目,该项目可以在ie10及以上下载日志。
debugout.js在ie浏览器上下载日志的方式是有问题的。
项目地址:https://github.com/wangduandu...

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/281999.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于 .NET 6 开发的开源远程终端工具

你好,这里是 Dotnet 工具箱,定期分享 Dotnet 有趣,有用的工具,不要忘记关注。今天介绍一个非常实用的工具 mRemoteNG,这是一个基于 .NET 6 开发的远程终端软件,开源免费,不用担心版权和软件费用…

第六次作业—例行报告

本周PSP 进度条 代码累计折线图 博文累计折线图 本周饼状图 转载于:https://www.cnblogs.com/zej87/p/7738895.html

Tomcat7/8开启WebDAV的支持

WebDAV是一种超文本传输协议,Tomcat默认是支持WebDAV的,且默认为禁用状态。 更多详细信息,请参考: https://zh.wikipedia.org/wiki/WebDAV http://www.webdav.org/ 开启步骤如下: 1、在Tomcat的webapps目录下新建webda…

免费分享一些.NET Core比较优秀的社区资料和微软官方资料

这次小编所分享的这套笔记手册,主要是分享一些.NET Core比较优秀的社区资料和微软官方资料。已经把所有的重要知识点进行了完整的归类和整理,可以让大家更清晰和快速的学习.NET Core,不浪费任何多余的时间!全网首发!相…

python异或运算怎么算_小强学Python+OpenCV之-1.4.4掩膜mask及位运算(与、或、非、异或)...

问题引入在小强学PythonOpenCV之-1.4.2裁剪一节,我们使用的是numpy数组切片功能实现图片区域的裁剪。那么,如果我们想要裁剪图像中任意形状的区域时,应该怎么办呢?答案是,使用掩膜(masking)。但是这一节我们…

51 Nod 1670 打怪兽

1670 打怪兽lyk在玩一个叫做“打怪兽”的游戏。游戏的规则是这样的。lyk一开始会有一个初始的能量值。每次遇到一个怪兽,若lyk的能量值>怪兽的能量值,那么怪兽将会被打败,lyk的能量值增加1,否则lyk死亡,游戏结束。若…

QQ协议调试器 QQDebugger

QQ协议老变,为了分析协议,单用抓包工具还是不够的,还是得需要很好的调试工具。在网上找了几个调试工具,易用性均欠佳,不得已自己开发了一个 QQDebugger,不敢专美,特意发布出来。QQDebugger 在功…

Uptime-Kuma 一个轻量的开源监控工具

点击蓝字 关注我们你好,这里是 Dotnet 工具箱,定期分享 Dotnet 有趣,有用的工具,不要忘记关注。今天给大家介绍一个开源的监控工具 Uptime Kuma, 主要用来监控 Web 以及网络, 和 Prometheus 相比, 它是轻量的, Uptime Kuma 是基于…

SpringBoot实战之SpringBoot自动配置原理

SpringBoot 自动配置主要通过 EnableAutoConfiguration, Conditional, EnableConfigurationProperties 或者 ConfigurationProperties 等几个注解来进行自动配置完成的。EnableAutoConfiguration 开启自动配置,主要作用就是调用 Spring-Core 包里的 loadFactoryName…

如何健康地跑步?

最近某司高管跑步 28 公里后猝死,被各大媒体报道,每次这种悲剧发生,而且还跟跑步扯上关系,总是让人心痛。通过报道了解到,这位高管酷爱跑马拉松,身体素质和运动能力肯定是强于普通人的,但还是遭…

vs2008C1902程序数据库管理不匹配

大清早打开vs2008,出现这么诡异的错, 删了一个dll的就好了。如图

全新升级的AOP框架Dora.Interception[3]: 基于特性标注的拦截器注册方式

在Dora.Interception中按照约定方式定义的拦截器可以采用多种方式注册到目标方法上。本篇文章介绍最常用的基于“特性标注”的拦截器注册方式,下一篇会介绍另一种基于(Lambda)表达式的注册方式:全新升级的AOP框架Dora.Interceptio…

全新升级的AOP框架Dora.Interception[4]: 基于表达式的拦截器注册

基于特性标注的拦截器注册方式仅限于将拦截器应用到自己定义的类型上,对于第三方提供的类型就无能为力了。对于Dora.Interception来说,拦截器注册本质上建立拦截器与一个或者多个目标方法之间的映射,所以最笨的方式就是利用反射的方式得到表示…

C语言程序设计第三次作业

(一)改错题 计算f(x)的值:输入实数x,计算并输出下列分段函数f(x)的值,输出时保留1位小数。 输入输出样例1:   Enterr x: 10.0   f(10.0) 0.1 输入输出样例2:   Enter x: 234   f(234.0…

fpga mysql_FPGA的一些琐碎知识整理

1.生产FPGA的厂家有:ALTERAXILINXATCELLatticeps:Altera和Xilinx主要生产一般用途FPGA,其主要产品采用SRAM工艺Actel主要提供非易失性FPGA,产品主要基于反熔丝工艺和FLASH工艺ps: 熔丝,顾名思义:把丝熔掉,反…

C# 反射类Assembly用法举例

概述程序运行时,通过反射可以得到其它程序集或者自己程序集代码的各种信息,包括类、函数、变量等来实例化它们,执行它们,操作它们,实际上就是获取程序在内存中的映像,然后基于这个映像进行各种操作。Assemb…

团队作业

团队&组员: 没有组名,大概是因为我们组虽然有10个人,但是好像只起到人多的地方就容易开车搞笑,没有内涵,取出来的都是秋名山吴彦组这样的开车组名,在大家的的强烈建议和玩笑中,决定了没有组…

算法系列【希尔排序】篇

常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。用一张图概括:关于时间复杂度:1. 平方阶 (O(n2)) 排序各类简单排序:直接插入、直接选择和冒泡排序。2. 线性对数…

sql查询索引语句_sql优化总结--基于sql语句优化和索引优化

概述最近做查询,统计和汇总。由于数据量比较庞大,大部分表数据上百万,甚至有的表数据上千万。所以在系统中做sql优化比较多,特此写一篇文章总结一下关于sql优化方面的经验。导致查询缓慢的原因1、数据量过大2、表设计不合理3、sql…

电商行业运维实践

电商行业运维实践--------------------…