Файлы журнала не создаются с помощью библиотеки winston node js

Я работаю в узле JS и использую библиотеку Winston для регистрации. Следующий код не создает файл журнала.

var winston = require('winston');


var logger = winston.createLogger({
    transports: [
        new winston.transports.File({
            level: 'info',
            filename: './logs/all-logs.log',
            handleExceptions: true,
            json: true,
            maxsize: 5242880, //5MB
            maxFiles: 5,
            colorize: false
        }),
        new winston.transports.Console({
            level: 'debug',
            handleExceptions: true,
            json: false,
            colorize: true
        })
    ],
    exitOnError: false
});

module.exports = logger;
module.exports.stream = {
    write: function(message, encoding){
        logger.info(message);
    }
};

logger.info ("Привет, мир");

Он нормально регистрируется в терминале:

 {"message":"hello world","level":"info"}

Структура каталогов такая

-test.js
-winston.js
-log

1 ответ

Решение

Вот вам следует использовать Winston:

Ниже код создает файлы журнала в /log/ каталог.


Сначала установите winston-daily-rotate-file, fs и winston, используя:

npm i winston-daily-rotate-file fs winston

Создать файл с именем winston.js

const fs = require("fs");
const winston = require("winston");
const logDir = "log";

if (!fs.existsSync(logDir)) {
    fs.mkdirSync(logDir);
}

const tsFormat = () => (new Date()).toLocaleTimeString();
module.exports = logger = winston.createLogger({
    transports: [
        new (winston.transports.Console)({
            format: winston.format.combine(
                winston.format.colorize(),
                winston.format.timestamp(),
                winston.format.align(),
                winston.format.simple(),
            ),
            level: 'info'
        }),
        new (require("winston-daily-rotate-file"))({
            filename: `${logDir}/-results.log`,
            format: winston.format.combine(
                winston.format.timestamp(),
                winston.format.json(),
            )
        }),
        new winston.transports.File({ 
            filename: 'log/error.log', 
            level: 'error',
            format: winston.format.combine(
                winston.format.timestamp(),
                winston.format.simple(),
            )
        }),
    ]
});

Теперь все, что вам нужно сделать, это импортировать регистратор и использовать его. Ниже приведен пример.

Теперь в том же каталоге создайте новый файл test.js и добавьте следующий код:

const logger = require("./winston.js");

logger.info(`Test info Log!`);
logger.error(`Test error Log!`);

Теперь запустите test.js используя

node test.js

Надеюсь, это то, что вы ищете.

Другие вопросы по тегам