Я новичок как в 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?