PM2 не выбирает ошибки, выдаваемые Winston в консоли - PullRequest
0 голосов
/ 21 января 2019

Я новичок как в PM2, так и в Winston. У меня есть следующая конфигурация для Winston

logger.js

'use strict'

const { createLogger, format, transports } = require('winston');
const configs = require('../app');
const ENV = configs.ENV;
const logLevel = ((ENV.toLowerCase() === 'dev') || (ENV.toLowerCase() === 'uat') ? 'debug' : 'info');

let customFormat = format(info => {
    if (info instanceof Error) {
        return Object.assign({}, info, {
            extra : info.extra,
            message: info.message,
            stack: info.stack
        });
    }
    else {
        return Object.assign({}, info, {
            message : info.message,
            data : info.data
        })
    }
})

let logger = createLogger({
    level : logLevel,
    format : format.combine(
        format.colorize(),
        format.simple(),
        format.timestamp(),
        customFormat()
    ),
    transports : [
        new transports.Console({
            handleExceptions : true,
            format : format.simple()
        })
    ],
    exitOnError : false,
})


exports.info = (message, additionalData) => {
    let logBody = {
        message : message,
        data : additionalData
    }
    logger.info(logBody);
}

exports.debug = (message, additionalData) => {
    let logBody = {
        message : message,
        data : additionalData
    }
    logger.debug(logBody);
}

exports.error = (message, error) => {
    error.extra = message;
    logger.error(error);
}

Тогда у меня есть мой конфигурационный файл PM2 app.config.json

{
    "apps" : [
        {
            "name" : "app",
            "script" : "./src/app.js",
            "instances" : "1",
            "exec_mode" : "cluster"
        }
    ]
}

Теперь, когда я запускаю приложение с командой pm2 start app.config.json и проверяю журнал ошибок на ~/.pm2/logs/app-error-0.log, я вижу только предупреждения, которые регистрируются.

Приложение аварийно завершает работу и перезапускается несколько раз, поскольку оно зависит от MongoDB, и если MongoDB не запущено, приложение не должно запускаться.

Однако я нигде не вижу журналы ошибок, напечатанные в файле ошибок.

Но когда я запускаю то же самое приложение с командой node ./src/app.js, я вижу следующие журналы ошибок, напечатанные на консоли

error: failed to connect to server [127.0.0.1:27017] on first connect [MongoNetworkError: connect ECONNREFUSED 127.0.0.1:27017] {"name":"MongoNetworkError",
"errorLabels":["TransientTransactionError"],
"extra":"Error connecting to APP DB: ",
"timestamp":"2019-01-21T12:18:15.354Z","stack":"MongoNetworkError: failed to connect to server [127.0.0.1:27017] on first connect [MongoNetworkError: connect ECONNREFUSED 127.0.0.1:27017]\n    at Pool.<anonymous> (/home/Auro/sampleProject/node_modules/mongodb-core/lib/topologies/server.js:564:11)\n................"}

Фрагмент кода, в который я записываю ошибку:

const logger = require('../../logger')
........
........
dbConnection.on('error', (err) => {
    logger.error('Error connecting to APP DB: ', err);
    process.exit(1);
})

Куда я иду не так? Почему PM2 не выбирает ошибку winston, напечатанную на консоли? Я знаю, что PM2 очень хорошо работает с console.log, но как мне заставить его работать с winston?

...