Как с помощью файла журнала Winston сохранить информационное сообщение и сообщение об ошибке в отдельном файле?

Я пытался записывать информацию и ошибки в файл журнала с помощью Winston. Если какая-то информация хранится в info.log. Если возникли неперехваченные ошибки исключения, он хранится только в файле error.log. Но если возникают общие ошибки, он сохраняет оба файла (info .log и error.log), как исправить это, любой дает какое-то решение.

winston.js

const winston = require('winston');
require('winston-mongodb');
require('express-async-errors');

const winstonLogger = function () {

    winston.add(new winston.transports.Console({
        format: winston.format.combine(
        winston.format.simple(),
        winston.format.timestamp(),
        winston.format.prettyPrint(),
        winston.format.colorize()
            ),
            handleExceptions: true
        }));
    // Info Log messages to file
    winston.add(new winston.transports.File({
        filename: 'logs/info.log',
        level: 'info'
    }));
    // Error Log Messages file
    winston.add(new winston.transports.File({
        filename: 'logs/error.log',
        level: 'error',
        handleExceptions: true,
    }));
};

module.exports = winstonLogger;

Я хочу, чтобы информационное сообщение хранилось в файле info.log, а сообщение об ошибке хранилось в файле error.log. Ошибка исключения исключена, сохраненная в отдельном файле с использованием Winston


person hari prasanth    schedule 16.07.2019    source источник


Ответы (1)


Ведение журнала Winston основано на указанном вами уровне. Все журналы ниже этого уровня переходят в указанный файл.

уровни ведения журнала от 0 до 5 (от самого высокого до самого низкого):

0: error
1: warn
2: info
3: verbose
4: debug
5: silly

Ниже приведен пример кода из документации Winston:

const logger = winston.createLogger({
  level: 'info',
  format: winston.format.json(),
  defaultMeta: { service: 'user-service' },
  transports: [
    //
    // - Write to all logs with level `info` and below to `combined.log` 
    // - Write all logs error (and below) to `error.log`.
    //
    new winston.transports.File({ filename: 'error.log', level: 'error' }),
    new winston.transports.File({ filename: 'combined.log' })
  ]
});
person dn_c    schedule 16.07.2019
comment
Я пробовал, но сообщения об ошибках хранятся в обоих файлах Я хочу хранить только error.log - person Sudharsan Venkatraj; 16.07.2019
comment
да, поскольку ошибка - это самый высокий уровень, он будет записывать все уровни в error.log. - person dn_c; 16.07.2019
comment
Можно попробовать использовать настраиваемые уровни и регистрировать ошибки для самого нижнего настраиваемого уровня. - person dn_c; 16.07.2019
comment
const myCustomLevels = {уровни: {foo: 0, bar: 1, baz: 2, foobar: 3}}; const customLevelLogger = winston.createLogger ({уровни: myCustomLevels.levels}); - person dn_c; 16.07.2019