如何记录“捕获的”异常?
Posted
技术标签:
【中文标题】如何记录“捕获的”异常?【英文标题】:How to log "catched" exceptions? 【发布时间】:2013-05-02 01:46:43 【问题描述】:当winston 处理未捕获的异常时,它会打印出有关未捕获异常的良好信息。如何对“捕获的异常”执行相同操作?
if (err)
// winston. log the catched exception
我查看了来源,似乎有一个logException
method,但我不知道如何使用它。
var logger = new winston.Logger(
transports: [new winston.transports.Console(handleExceptions: true)]
)
var err = new Error('test error.')
logger.logException(err.message) //no method 'logException'
【问题讨论】:
【参考方案1】:logException
是Transport
的方法,而不是Logger
类的方法。你需要的是一个error
方法:
var winston = require('winston');
var logger = new winston.Logger(
transports: [new winston.transports.Console(handleExceptions: true)]
)
var err = new Error('test error.');
logger.error(err.message);
https://github.com/flatiron/winston#using-logging-levels
【讨论】:
【参考方案2】:您可以将捕获的异常发送回进程,winston.Logger 将捕获错误。示例:
process.emit('uncaughtException', err);
【讨论】:
【参考方案3】:var winston = require('winston');
var err = new Error('test error.');
winston.error(winston.exception.getAllInfo(err));
【讨论】:
也许这是来自旧版本的winston,但没有这样的API。 github.com/winstonjs/winston【参考方案4】:使用logform:
const format = require('logform');
const errors = format;
const errorsFormat = errors( stack: true )
const info = errorsFormat.transform(new Error('Oh no!'));
console.log(info);
// Error: Oh no!
// at repl:1:13
// at ContextifyScript.Script.runInThisContext (vm.js:50:33)
// at REPLServer.defaultEval (repl.js:240:29)
// at bound (domain.js:301:14)
// at REPLServer.runBound [as eval] (domain.js:314:12)
// at REPLServer.onLine (repl.js:468:10)
// at emitOne (events.js:121:20)
// at REPLServer.emit (events.js:211:7)
// at REPLServer.Interface._onLine (readline.js:282:10)
// at REPLServer.Interface._line (readline.js:631:8)
或者使用winston.format.errors( stack: true ):
import winston from 'winston';
const logger = winston.createLogger(
level: 'info',
format: winston.format.combine(
winston.format.errors( stack: true ),
winston.format.json(),
winston.format.prettyPrint(),
),
defaultMeta: service: 'user-service' ,
transports: [
new winston.transports.File(
filename: 'log/combined.log',
options: flags: 'w' ,
),
],
);
export default logger;
【讨论】:
以上是关于如何记录“捕获的”异常?的主要内容,如果未能解决你的问题,请参考以下文章