Логирование
Если в dev у нас не возникает проблем с отладкой сервера, то в проде идёт большой объём информации и можно не уследить за ошибками в ходе работы. Для того, чтобы мы получали все ошибки в файл, который потом можно прочитать, нам нужно добавить чуть-чуть кода в index.js:
/// const fastify = require('fastify')({ logger: true })
const fastify = require('fastify')({
logger: {
level: 'info',
file: `log/${new Date().toLocaleDateString()}.log`
}
});
Использовать лог мы будем так:
fastify.log.error(error);
Все просто и понятно, данный лог в файл нас вполне устроит. Но, если вам нужно что-то сложнее и функциональнее, то можно написать свой логер. Установим Winston: NPM:
npm i -s winston
YANR:
yarn add winston
Создадим файл logger.js в папке module:
const winston = require('winston');
const { format, transports } = winston;
module.exports = (appname) => {
winston.loggers.add('default', {
level: 'info',
levels: Object.assign({ 'fatal': 0, 'warn': 4, 'trace': 7 }, winston.config.syslog.levels),
format: format.combine(format.splat(), format.json()),
defaultMeta: { service: appname + "_" + (process.env.NODE_ENV || "development") },
transports: [
new transports.File({ filename: `log/${new Date().toLocaleDateString()}.log` }),
]
});
let logger = winston.loggers.get("default");
if (process.env.NODE_ENV !== 'production') {
logger.add(new transports.Console({
format: format.simple(),
handleExceptions: true
}));
}
process.on('uncaughtException', function (err) {
console.log("UncaughtException processing: %s", err);
});
logger.child = function () { return winston.loggers.get("default") };
return logger
}
Этот модуль можно изменять под любые цели, но в целом если сравнивать первый метод и этот то разницы в выводе практически не будет. Далее нам нужно импортировать наш logger и указать его как основной логгер для fastify:
const logger = require('logger');
const fastify = require('fastify')({
logger: logger("test_api")
})
Вот и все, наш пользовательский логер готов к работе!
Last updated
Was this helpful?