【问题标题】:Outputting Logs inside JSON Object with Winston and Winston-Daily-Rotate-File in Node.js在 Node.js 中使用 Winston 和 Winston-Daily-Rotate-File 在 JSON 对象中输出日志
【发布时间】:2020-09-28 14:27:05
【问题描述】:

我有同样的问题,想要和这里一样的结果: Outputting Logs inside JSON Object with Winston in Node.js

但我使用winston-daily-rotate-file,因此给定的答案/解决方案不适用于我的情况。

我的记录器看起来像这样:

const path = require('path');
const { createLogger, format, transports, addColors, config } = require('winston');
const winstonDailyRotateFile = require('winston-daily-rotate-file');
const { combine, timestamp, json, colorize, label, printf, errors } = format;

const CustomTransport = require('./customtransport')

const customLevels = {
    levels: {
      error: 0,
      warn: 1,
      fileProcessed: 2,
      info: 3,
      debug: 4,
      silly: 5,
    },
    colors: {
        error: 'bold red',
        warn: 'bold yellow',
        fileProcessed: 'bold blue',
        info: 'bold cyan',
        debug: 'bold gray',
        silly: 'bold magenta'
    }
  };

addColors(customLevels.colors);

const consoleFormat = printf(({ level, message, label, stack }) => {
    const log = `${level}: [${label}] ${message}`;
    const errLog = `${log}\n${stack}`;

    return stack ? errLog : log;
});

module.exports = (module) => {
    const logger = createLogger({
        levels: customLevels.levels,
        transports: [
            new CustomTransport({

            }),
            new winstonDailyRotateFile({
                format: combine(
                    errors({stack: true}),
                    timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
                    label({ label: path.basename(module.filename) }),
                    json(),
                ),
                dirname: './logs',
                filename: 'sppa-%DATE%.log',
                datePattern: 'YYYY-MM-DD',
                zippedArchive: true,
                maxSize: '20m',
                maxFiles: '14d'
            })
        ]
    });

    // If we're not in production then log to the `console` 
    if (process.env.NODE_ENV !== 'production') {
        logger.add(new transports.Console({
            levels: customLevels.levels,
            level: 'silly',
            format: combine(
                colorize(),
                errors({stack: true}),
                label({ label: path.basename(module.filename) }),
                consoleFormat
            ),
        }));
    }

    return logger;
}

任何帮助将不胜感激!

【问题讨论】:

    标签: node.js json logging winston


    【解决方案1】:

    我现在使用正则表达式的解决方法,用逗号替换换行符并在文件周围添加 [ ]。它看起来像这样:

    app.get("/log", (req, res) => {
        fs.readFile('C:\\Path\\To\\nodeAPI\\logs\\test.log', function (err, data) {
            if (err) {
                console.log(err);
            }
            let content = data.toString('utf8').replace(/\r?\n|\r/g, ',');
            content = "[" + content + "]";
            res.send(content);
        });
    });
    

    【讨论】:

      猜你喜欢
      • 2019-06-12
      • 2019-05-14
      • 2016-06-30
      • 2019-10-21
      • 2017-01-31
      • 1970-01-01
      • 2022-01-20
      • 1970-01-01
      • 2019-09-29
      相关资源
      最近更新 更多