node.js - 如何在 Winston Http Transport 上捕获错误
问题描述
我正在使用winston 创建一个日志框架。基本上使用内置的winston http传输。我的问题是,我应该如何捕获由于无效的主机/路径/身份验证而在发出 http 发布请求时可能发生的任何 http 异常。以下是我的代码结构-
const { createLogger, format, transports } = require('winston');
const { combine, timestamp, label, printf } = format;
const transportOptions = {
host: 'host',
port: 'port',
path: '/',
auth: '',
};
const myFormat = printf(debug => {
var msg = {
timestamp: debug.timestamp,
label: debug.label,
level: debug.level,
message: debug.message,
};
return JSON.stringify(msg);
});
const logger = createLogger({
level: 'debug',
format: combine(label({ label: 'label' }), timestamp(), myFormat),
transports: [
new transports.Console(),
new transports.Http(transportOptions),
],
json: false,
});
logger.info('Test');
如果我在其中提供错误的值,transportOptions
则什么也不做。我希望我的框架通过某种异常,以便我知道何时发生任何错误/异常。任何人都可以给我任何建议吗?
解决方案
根据https://github.com/winstonjs/winston/blob/master/lib/winston/transports/http.js#L57'warn'
,如果 HTTP 响应代码不是 200 ,那么HTTP 传输似乎会发出一个事件。所以只要您的服务器在出现错误时返回非 200,那么您就可以'warn'
从传输中监听事件并相应地处理错误(抛出异常或任何您想要的)。这是示例代码(我测试过并且有效):
// Declare your transport outside the logger definition
const t = new transports.Http(transportOptions);
...
t.on('warn', (e) => console.log('warning! ' + e));
logger.info('Test'); // 'warning! ...'
请注意,如果服务器没有响应,则传输不会报告警告;我不确定这是错误还是功能... :)
推荐阅读
- javascript - Django 中的 Google TTS:使用 base64 字符串在 Javascript 中创建音频文件
- javascript - 反应上下文的问题
- sql - 保持在 Google BigQuery SQL 查询配额内的通用方法
- rest - 处理程序中有多个端点或具有附加逻辑的单个端点?
- javascript - 如果目标浏览器只有 Chrome 和 Firefox,是否需要 babel?
- excel - Excel:在多个工作表中查找最大值的位置
- xml - 使用 XSLT 和 XML 的动态表行
- javascript - 如何检查变量值是否未定义或“未定义”
- firefox - AES 128 和 Firefox 块
- chef-infra - 如何更改由厨师引导的节点上的证书