node.js - 在nodejs中获取整个错误堆栈跟踪
问题描述
try … catch
我的SQLite 查询遵循一个简单的模式
try {
… run query and get result …
}
catch (error) {
console.log(error);
}
出错时,我得到一个很好的堆栈跟踪,像这样
SqliteError: no such column:
at getData (/Users/punkish/Projects/zenodeo/bin/facets.js:8:25)
at Object.<anonymous> (/Users/punkish/Projects/zenodeo/bin/facets.js:23:1)
at Module._compile (internal/modules/cjs/loader.js:1156:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1176:10)
at Module.load (internal/modules/cjs/loader.js:1000:32)
at Function.Module._load (internal/modules/cjs/loader.js:899:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:74:12)
at internal/main/run_main_module.js:18:47
我已经编写了自己的小型日志记录程序,因此我可以用颜色(使用chalk
)和一些我觉得有用的额外信息来修饰消息,现在我有了
try {
… run query and get result …
}
catch (error) {
mylogger(error);
}
除了,现在我得到以下
SqliteError: no such column:
不,mylogger
不是吃/切掉多余的部分。我在其中添加了以下内容
if (typeof error === 'object') {
log('type: object');
log(`error: ${JSON.stringify(error)}`)
}
我得到
type: object
error: SqliteError: no such column:
似乎堆栈跟踪正在流式传输,并且所有这些都没有转到mylogger
. 无论如何,我怎样才能得到所有这些?
解决方案
我正在使用 Winston,我之前遇到过同样的问题。我使用.constructor
而不是instanceOf
确定可能是最佳实践的数据类型。但我这里的代码可能对你有一些价值:
winston.format.printf(info => {
if (info.message.constructor === Object || Error) {
if (info.stack === undefined) {
return `${info.timestamp} [${info.label}] ${info.level}: ${JSON.stringify(info.message, null, 1)}`;
} else {
return `${info.timestamp} [${info.label}] ${info.level}: ${info.message} Stack: ${info.stack}`;
}
} else {
return `${info.timestamp} [${info.label}] ${info.level}: ${info.message}`;
}
})
);
推荐阅读
- python - 如何将程序启动代码(__name__ ==“__main__”)排除在 pytest 覆盖率报告中?
- java - MyEclipse 中的 Ant 类路径构建问题
- excel - 搜索命名范围以查找用户输入并将找到输入的行复制/粘贴到第二个工作表中
- node.js - 使用 Kafka-Node 模块时出现连接超时错误
- java - 如果不存在,单声道继续
- ios - 字符串中的内联按钮和/或文本字段,使用 Swift 与文本相同
- google-chrome-devtools - 如何更改 Chrome DevTools 中的指南/规则颜色
- google-cloud-platform - MQTT over WebSockets 定期断开连接
- fluid-dynamics - 热方程与 Navier Stokes 方程的关系
- c - 意外的断点试图从结构打印 C 字符串