Winston/Node.js how add a Transport only for certain environment?

前端 未结 1 1081
难免孤独
难免孤独 2021-02-15 11:45

I have the follow configuration:

var winston = require(\'winston\');
var Mail = require(\'winston-mail\').Mail;

var logger = new (winston.Logger)({
  transports         


        
1条回答
  •  -上瘾入骨i
    2021-02-15 12:19

    The transports configuration is just a plain old Array. So we can use all the usual tricks on it. In this case, you want a conditional push().

    const winston = require('winston');
    const transports = [
        new winston.transports.Console({
            level    : 'info',
            colorize : true
        }),
        new winston.transports.File({
            level    : 'info',
            filename : './logs/logs.log'
        })
    ];
    
    if (process.env.NODE_ENV === 'production') {
        const Mail = require('winston-mail').Mail;
    
        transports.push(new Mail({
            to       : 'xxxxxx@xxxxxx.xx',
            from     : 'winston@xxxxx.xx',
            subject  : 'Errors occurred',
            level    : 'error',
            host     : 'smtp.xxxxx.xx',
            username : 'xxxx@xxxx.xx', 
            password : 'xxxxx',
            port     : 1234
        }));
    }
    
    const logger = new winston.Logger({
        transports
    });
    

    This code should be usable as is on Node.js >= 4, after filling in the mail configuration placeholders.

    The same principle can be applied to the exceptionHandlers.

    0 讨论(0)
提交回复
热议问题