Я обнаружил, что выбрасывание необработанных исключений и отклонений возвращает анонимный объект ошибки, из-за которого мне было трудно разместить информацию, необходимую для вложенных свойств, в мета-раздел документов MongoDB.Анонимный объект имеет следующие свойства:
- "ошибка"
- "уровень"
- "сообщение"
- "стек"
- «исключение»
- «дата»
- «процесс»
- «ОС»
- «трассировка»
* 1022К сожалению, единственный способ получить то, что мне было нужно, - это преобразовать сообщение объекта в строку, а затем взломать его, чтобы получить от него то, что мне нужно.У кого-нибудь есть способ получше?Я уверен, что я добавлю больше полей в будущем, я просто хотел посмотреть, есть ли менее хакерский способ сделать это в данный момент.
const errorStackFormat = winston.format(info => {
if (info instanceof Object){
let infoStr = (info.message.toString());
let name = (infoStr.substr(0, infoStr.indexOf(":"))).trim();
return Object.assign({}, info, {
message: info.message,
meta: {
name: name,
stack: info.stack,
trace: info.trace,
properties: Object.getOwnPropertyNames(info)
}});
};
return info
});
Обратите внимание, это для регистрации необработанные исключения и обещания отклонения.В настоящее время winston не поддерживает необработанные отклонения, поэтому на данный момент я просто использую следующее:
process.on('unhandledRejection', (ex) => {
throw ex;
});
Какой из них будет обрабатывать Winston как необработанное исключение, а затем пропускает через вышеуказанный форматер.Есть ли более чистый способ сделать это?