регистрация в Winston отдельных файлов - PullRequest
0 голосов
/ 07 мая 2018

Я новичок в node.js и имею такой конфиг winson

const winston = require('winston');

const transports = [];

if (process.env.NODE_ENV !== 'development') {
  transports.push(new (winston.transports.DailyRotateFile)({
    filename: path.resolve(__dirname, '../logs/%DATE%/source1.log'),
    level: 'info',
    datePattern: 'YYYY-MM-DD',
  }));
   transports.push(new (winston.transports.DailyRotateFile)({
    filename: path.resolve(__dirname, '../logs/%DATE%/source2.log'),
    level: 'info',
    datePattern: 'YYYY-MM-DD',
  }));
}

let logger = winston.createLogger({
    level: 'info',
    format: winston.format.json(),
    transports,
    exitOnError: true,
});

logger.log({
    date: (new Date()).toString(),
    level,
    message,
    source,
});

и мне нужно ведение журнала, чтобы отдельные файлы зависели от источника (все журналы source1 в файле ../logs/%DATE%/source1.log 'и то же самое с source2)

Как это сделать?

1 Ответ

0 голосов
/ 23 июля 2018

от GoogleTraduction FR -> EN

Привет!

Если вы хотите, чтобы ваши журналы были разделены на несколько отдельных файлов, я могу предложить вам следующее решение.
Примечание. Это решение основано на уровнях журнала.

Уинстон: 3.0.0
Узлы: 9.3.0

. / Регистратор / index.js

const winston = require('winston');

module.exports = (dirname) => {
    const loggers = {
        info: null,
        warn: null,
        query: null,
        errDat: null,
        errFun: null,
        errInt: null,
    };

    for (let level of Object.keys(loggers)) {
        loggers[level] = winston.createLogger({
            levels: { [level]: 0 },
            format: winston.format.combine(
                winston.format.timestamp(),
                winston.format.printf(info =>
                    `${info.timestamp}\t[${info.level}]\t${info.message}`
                ),
            ),
            transports: [
                new winston.transports.Console({
                    level
                }),
                new winston.transports.File({
                    dirname,
                    filename: `${level}.log`,
                    level,
                    format: winston.format.json(),
                }),
            ]
        })[level];
    }

    return loggers;
};

Другой файл

const path = require('path');
const { info, query, errInt, errDat, errFun } = require('./logger')(
    path.join(__dirname, 'logs')
);

info(`Test`);
query(`Test`);
errDat(`Test`);
errInt(`Test`);
errFun(`Test`);
...