# log.js **Repository Path**: clark-fl/log.js ## Basic Information - **Project Name**: log.js - **Description**: 只使用一行代码即可轻松获取前端日志 - **Primary Language**: TypeScript - **License**: ISC - **Default Branch**: master - **Homepage**: https://logjs.site/ - **GVP Project**: No ## Statistics - **Stars**: 385 - **Forks**: 80 - **Created**: 2021-09-13 - **Last Updated**: 2025-06-17 ## Categories & Tags **Categories**: logging **Tags**: 日志, Web, web前端, React, Vue ## README ### 经过大家反馈,IP获取策略做了一些调整,内置了一些公共IP获取的实现,logjs会尝试自行获取IP,如果对公共服务敏感的应用,可以在init/setOptions中设置ip/city,设置后,logjs则停止尝试获取ip,全程采取开发者配置中的ip进行后续逻辑的使用,包括但不限于uuid的生成等 > > 经历了13个月的时间,log.js V2 版本终于制作完成了,期间伴随着一个完整 C端系统的成长,在与实际业务的碰撞中,进行了数次小版本的迭代,全新重构后的 log.js 新增了许多特性,也同时移除了一些冗余功能,下面让我重新来介绍下新版本的 log.js. issue 我会第一时间回复,欢迎大家 star [开源地址](https://gitee.com/clark-fl/log.js) > ### 首先,log.js 是什么 log.js 是一个前端监控插件,他可以提供 1. JS执行异常捕获 2. 性能指标监测及捕获 3. 异常IO,自定义IO 筛选捕获 4. 终端信息捕获,IP,城市,分辨率,UA解析等 5. 点击动作捕获 等... 监控内容还在持续补充中 ### 为什么是 log.js 作为一个web前端开发者,深知web信息的采集受到终端影响而天然采集困难,异常场景往往无法完整复现,或者未知的异常影响用户留存,现阶段市面上的web探针大多集成在自身应用体系内,存在 配置重量级,难以解耦 等问题。 log.js 开箱即用的方式极大缩减了信息采集的难度,渐进式的设计也可以满足大部分自定义场景 ### log.js 受到框架限制吗 不会,log.js 基于hack劫持方式采集底层数据,与框架无关,不论是 React,Vue,Jquery,都能hold住. ### log.js 会影响应用吗 不会,log.js 不会操作视图,同时采集数据后的上报也以队列形式等待业务io低峰期才会进行. ### log.js 可以采集小程序日志吗 目前不行,log.js 基于 W3C 标准实现的 DOM,目前还没有针对小程序的兼容规划. ### 我应该如何使用 log.js 开箱即用,log.js 为 IIFE 方式注册,无需生成实例,调用 `log.init(…params)` 您仅需要配置发送地址即可启动 **log.js** ```jsx 示例 ``` ### 深入配置 log.js ```jsx log.init({ logType: ["error", "diy", 'click', 'io'],//日志类型 - [ 'error', 'click', 'diy', 'io' ] degree: 1,//采集率 - (0 - 1) id: 'logJs',//logjs实例标识, ioFilter: item => true,//I/O筛选器(fun,用以定义 io_list 获取规则) sendAddress: '',//日志发送地址(默认 POST application/json 接收服务需自行配置跨域) reportingBefore: params => params,//日志上报前钩子(用以重构参数结构,追加自定义参数) }) ``` ### log.js 对外暴露的方法 ```jsx log.init(…params) //启动log.js 注意:在未调用此方法前,log.js 实际上已经开始工作了,不过信息均存放在内存中,外部无法访问 ``` ```jsx log.setOptions(…params) //更新配置 ``` ```jsx log.log(...) //打印远程日志 与console.log 使用方式一致,消息将作为自定义消息推送 ``` ```jsx log.getTerminalInfo() //获取终端信息 注意:需要在 log.js init 后使用 ``` ```jsx log.getPerformanceInfo() //获取性能信息 注意:需要在 log.js init 后使用 ``` ```jsx log.version //获取当前 log.js 版本 ``` ### 消息体解释 ```jsx { "io_list": [{ //io消息继承自 PerformanceEntry [文档地址](https://developer.mozilla.org/zh-CN/docs/Web/API/PerformanceEntry) "name": "http://localhost:63342/log.js/website/index.html?_ijt=26dmaaemranugo6rciidd5nar5", "entryType": "navigation", "startTime": 0, "duration": 191.5, "initiatorType": "navigation", "nextHopProtocol": "http/1.1", "renderBlockingStatus": "blocking", "workerStart": 0, "redirectStart": 0, "redirectEnd": 0, "fetchStart": 4, "domainLookupStart": 4, "domainLookupEnd": 4, "connectStart": 4, "connectEnd": 4, "secureConnectionStart": 0, "requestStart": 9.199999928474426, "responseStart": 10.899999976158142, "responseEnd": 13.299999952316284, "transferSize": 3064, "encodedBodySize": 2764, "decodedBodySize": 2764, "serverTiming": [], "unloadEventStart": 17.5, "unloadEventEnd": 17.5, "domInteractive": 110.10000002384186, "domContentLoadedEventStart": 110.10000002384186, "domContentLoadedEventEnd": 110.29999995231628, "domComplete": 190.79999995231628, "loadEventStart": 190.79999995231628, "loadEventEnd": 191.5, "type": "reload", "redirectCount": 0, "activationStart": 0, "logType": "io", "timeStep": 1667894728849 }], "terminal_info": { "resolving_power": "1440*900", //宽高比 "referrer": "http://localhost:63342/log.js/website/index.html?_ijt=26dmaaemranugo6rciidd5nar5", //referrer "ua": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36", //ua "browser": { //浏览器信息 "name": "Chrome", "version": "107.0.0.0", "major": "107" }, "engine": { //引擎信息 "name": "Blink", "version": "107.0.0.0" }, "os": { //系统信息 "name": "Mac OS", "version": "10.15.7" }, "device": {}, "cpu": {}, "ip": "xx.xx.x.xx", "city": "湖北省武汉市" }, "performance_info": { "fcp": 115.39999997615814, //首次内容绘制 (FCP) "fp": 11, //白屏时间(FP) "redirect_time": 0, //重定向耗时 "domain_lookup_time": 0, //DNS查询耗时 "connect_time": 0, //TCP链接耗时 "response_time": 2, //HTTP请求耗时 "dom_complete_time": 81, //DOM解析耗时 "ttfb": 10.899999976158142 //第一字节时间 (TTFB) }, "uid": "a165595ca1d7f19c6eef5a31f586767b",//user标识,由ip与ua生成,用以追溯行为轨迹 "id": "logJs" //配置信息中的id标识将携带在每条报文中 } ... 其他消息体消息待补充 ```