qingwa让console.log在终端显示文件名和行号

qingwa是一款用于Node.js的轻量级工具,它能够让console系列方法在终端输出日志时显示具体的文件名及行号,极大地方便了模块化项目的调试工作。

qingwa(青蛙)是最近随手写的一个小玩意儿。之所以叫这名字,是因为不知道起什么名字好。青蛙抓虫子,也契合使用场景。然而英文frog已经在npm上被占用了,所以就干脆用拼音好了。

qingwa能让Node.js console系列方法在终端下输出日志时能显示具体的文件名及行号。

当一个模块很多文件时,调试日志太多还是比较麻烦的。有时候甚至都不知道对应的日志是从哪个文件中输出的。


项目地址:https://github.com/sbfkcel/qingwa

反馈意见请在github上提。

使用效果

qingwa demo

如何使用?

qingwa的使用很简单,引入到项目中执行即可。

安装

npm install qingwa --save

使用

在代码中引入并执行即可

require('qingwa')();

console.log('Hello');    // 此时终端输出的日志即是带有文件名和行号的

实现原理

通过try…catch内嵌throw error定位到具体的位置,并对console系列方法进行再次封装。

### 在HarmonyOS Next环境中使用ArkTS时显示`console.log`的行号 为了在HarmonyOS Next环境中的ArkTS项目里让`console.log`输出包含行号信息,可以考虑重写`console.log`函数来增强其功能。通常情况下,在浏览器或其他JavaScript运行环境下,原生的`console.log`不会自动附带文件名行号。通过自定义实现可以在日志消息前加上调用栈信息。 下面是一个简单的例子,展示如何修改`console.log`以便打印出更多的上下文信息: ```javascript (function() { const originalConsoleLog = console.log; console.log = function(...args) { const err = new Error(); const stackLines = err.stack.split('\n'); // 获取当前调用位置的信息 let callerInfo = ''; if (stackLines.length >= 3) { // 跳过Error构造器本身以及这个wrapper函数 const matchResult = stackLines[2].match(/at\s+(.+):(\d+):/); if (matchResult && matchResult.length === 4) { callerInfo = `(${matchResult[1]}:${matchResult[2]}) `; } } originalConsoleLog(callerInfo, ...args); // 使用原始的日志记录方式并附加额外信息 }; })(); ``` 这段代码创建了一个闭包,保存了原有的`console.log`行为,并替换了它以加入堆栈跟踪解析逻辑。每当执行新的`console.log`时,都会尝试获取最近一次调用的位置,并将其作为前置字符串添加到实际要打印的消息之前[^1]。 值得注意的是,这种方法依赖于错误对象(`new Error`)提供的堆栈追踪能力,这可能不是最高效的解决方案,但在开发调试阶段非常有用。对于生产部署来说,建议移除此类装饰性的日志处理以免影响性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值