How can I add timestamp to logs using Node.js library Winston?

后端 未结 9 797
清歌不尽
清歌不尽 2021-01-31 12:55

I want to add timestamp to logs. What is the best way to achieve this?

9条回答
  •  别跟我提以往
    2021-01-31 13:40

    I took Biswadev's answer and created a stringified JSON object. This way if i need to process the logs later it will be in a well structured format.

    const winston = require('winston');
    const { createLogger, format, transports } = require('winston');
    
    const dotenv = require('dotenv');
    dotenv.config();
    
    var logger = createLogger({
        level: 'info',
        format: format.combine(
            format.timestamp({
                format: 'YYYY-MM-DD HH:mm:ss',
            }),
            format.printf((info) =>
                JSON.stringify({
                    t: info.timestamp,
                    l: info.level,
                    m: info.message,
                    s: info.splat !== undefined ? `${info.splat}` : '',
                }) + ','
            )
        ),
    });
    
    if (process.env.NODE_ENV !== 'PRODUCTION') {
        logger.add(new transports.Console({ format: winston.format.cli() }));
    
        // Turn these on to create logs as if it were production
        // logger.add(new transports.File({ filename: 'log/output/error.log', level: 'error' }));
        // logger.add(new transports.File({ filename: 'log/output/warn.log', level: 'warn' }));
        // logger.add(new transports.File({ filename: 'log/output/info.log', level: 'info' }));
    } else {
        logger.add(new transports.File({ filename: 'log/output/error.log', level: 'error' }));
        logger.add(new transports.File({ filename: 'log/output/warn.log', level: 'warn' }));
        logger.add(new transports.File({ filename: 'log/output/info.log', level: 'info' }));
    }
    
    module.exports = {
        logger,
    };
    

    Usage:

    app.listen(port, () => logger.info(`app is running on port ${port}`));
    

    Output:

    info.log file:

    {"t":"2020-08-06 08:02:05","l":"info","m":"app is running on port 3001","s":""},
    

    Console:

    info:    app is running on port 3001
    

提交回复
热议问题