Логирование

Если в 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?