【问题标题】:How to log every message in new line using winston logger?如何使用winston logger在新行中记录每条消息?
【发布时间】:2017-08-15 00:09:06
【问题描述】:

我们正在使用winston logger 将事件记录到nodejs fs,我想使用winston 将每个事件写入新行,是否可以使用winston 库或任何其他适用于nodejs 的方法来完成该任务。

ctrl.js

var winston = require('winston');
var consumer = new ConsumerGroup(options, topics);
        console.log("Consumer topics:", getConsumerTopics(consumer).toString());
        logger = new (winston.Logger)({
            level: null,
            transports: [
//                new (winston.transports.Console)(),
                new (winston.transports.File)({
                    filename: './logs/st/server.log',
                    maxsize: 1024 * 1024 * 20,//15728640 is 15 MB
                    timestamp: false,
                    json: false,
                    formatter: function (options) {
                        return options.message;
                    }
                })
            ]
        });
        function startConsumer(consumer) {
            consumer.on('message', function (message) {
                logger.log('info', message.value);
                //callback(message.value);
                io.io().emit('StConsumer', message.value);
            });
            consumer.on('error', function (err) {
                console.log('error', err);
            });
        };
        startConsumer(consumer);

【问题讨论】:

    标签: javascript node.js logging winston


    【解决方案1】:

    我使用类似的东西,使用split 模块:

    const split = require('split');
    const winston = require('winston');
    
    winston.emitErrs = false;
    
    const logger = new winston.Logger({
      transports: [
        new winston.transports.File({
          level: 'debug',
          filename: 'server.log',
          handleExceptions: true,
          json: false,
          maxsize: 5242880,
          maxFiles: 5,
          colorize: false,
          timestamp: true,
        }),
        new winston.transports.Console({
          level: 'debug',
          handleExceptions: true,
          json: false,
          colorize: true,
          timestamp: true,
        }),
      ],
      exitOnError: false,
    });
    
    logger.stream = split().on('data', message => logger.info(message));
    
    module.exports = logger;
    

    它可以很好地满足我的需求,但您的里程可能会有所不同。

    split 模块:

    【讨论】:

    • 所以在我的情况下我可以做到logger.stream = split().on('data',message,function(message){message.value}) 抱歉我还不熟悉 ES6
    • @hussain No. 这个:logger.stream = split().on('data', message => logger.info(message)); 等同于这个:logger.stream = split().on('data', function (message) { logger.info(message); });
    • 但我看到它没有用这种方法写信给fs
    • @hussain 它正在写入文件系统 - 在我的示例中写入文件 server.log。你真的试过了吗?
    • 是的,我试过了,它没有写信给server.log,这就是为什么我问另一个问题,一旦我根据事件记录数据拆分,我是否可以在fs 中做某事
    猜你喜欢
    • 2016-03-20
    • 2018-09-15
    • 2020-04-19
    • 2018-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-04
    • 2018-08-02
    相关资源
    最近更新 更多