Я создаю приложение Node.js и не могу понять, как правильно настроить Winston Logger.
Что я хотел бы получить:
- Мое приложение должно иметь 6 пользовательских уровней ведения журнала (фатальный, ошибка, предупреждение, состояние, информация и отладка). Для этих уровней должны быть такие методы, как logger.status (message, ... details).
- Я хотел бы иметь возможность передавать дополнительные JS объекты (details) после сообщения для отладки / в целях оценки.
- Журналы должны быть напечатаны на консоли
- Все выходы консоли должны выглядеть следующим образом:
[ISO Date String] [Level in uppercase]: [Log Message]
- Журналы фатальных ошибок и журналы ошибок должны быть напечатаны красным
- Журналы отладки и информации должны быть напечатаны, только если константе (например, this.debug, относящейся к моему классу) присвоено значение true. Журналы отладки должны быть напечатаны желтым цветом.
- Журналы всех уровней должны быть записаны в DailyRotateFile в том же формате, что и выше (за исключением, конечно, цветов).
- Журналы должны храниться в MongoDB со следующими свойствами: дата, уровень, сообщение, подробности (содержащие все переданные объекты), метка (указывает, из какой части журнала было отправлено, для установки вручную).
Что я сделал до сих пор:
Как рекомендовано, я расширил класс winston по умолчанию, используя TypeScript, чтобы добавить методы для моей спецификации c logging уровни:
import winston = require('winston');
interface Logger extends winston.Logger {
fatal: winston.LeveledLogMethod;
error: winston.LeveledLogMethod;
warning: winston.LeveledLogMethod;
status: winston.LeveledLogMethod;
info: winston.LeveledLogMethod;
debug: winston.LeveledLogMethod;
}
Из этого интерфейса я создал экземпляр, подобный следующему:
this.logger = <Logger>winston.createLogger({
levels: {
fatal: 0,
error: 1,
warning: 2,
status: 3,
info: 4,
debug: 5
},
level: 'debug',
transports: [
new winston.transports.Console({
}),
new winston.transports.DailyRotateFile({
filename: 'cplus-%DATE%.log',
dirname: this.logsDir,
datePattern: 'YYYY-MM-DD-HH-mm'
}),
new winston.transports.MongoDB({
db: this.dbClient
})
]
});
Basi c вход в консоль и файл с использованием новых методов работает нормально, например,
this.logger.fatal('Connection to database ' + this.dbUrl + ' failed, cannot start', err);
создает следующий вывод:
{"message":"Connection to database mongodb://localhost:27017 failed, cannot startAuthentication failed.","name":"MongooseServerSelectionError","reason": ...
Теперь, как мне получить остальные, такие как форматирование и правильное хранение в MongoDB? Я пробовал несколько разных вещей, используя предустановленные форматы Winston, но безуспешно.
С уважением!