1.0.6 • Published 7 years ago

winston-log-and-exit v1.0.6

Weekly downloads
2,429
License
MIT
Repository
github
Last release
7 years ago

The Problem

Winston creates may execute logging callbacks before file streams have been flushed, and creates file streams asynchronously but executes the close methods synchronously, and as a result, the following messages may note be logged to file:

logger.info("This message may not be saved to file.",
    function(){process.exit()})

and:

logger.info("This message probably won't be saved to file.")
logger.close()
process.exit()

The solution

winston-log-and-exit is a patch which adds a log_and_exit() (or equivalently logAndExit()) method to Winston, which can be used with Winston's default logger like so:

var winston = require('winston');
require('winston-log-and-exit');

// add a file transport to winston's default logger
winston.add(winston.transports.File, { filename: 'somefile.log' });

winston.log_and_exit(/* log level */ "info" ,
                     /* log text  */ "This message *will* be included in the log files." ,
                     /* exit code */ 0 )

winston.info("This message *might* be included in the log files.")
process.nextTick(winston.info("This message probably won't be included in the log files.")
setTimeout(winston.info("This message almost certianly won't be included in the log files."),100)

and with a user-instantiated logger like so:

var winston = require('winston');
require('winston-log-and-exit');

var logger = new (winston.Logger)({
    transports: [
        new (winston.transports.Console)(),
        new (winston.transports.File)({ filename: 'somefile.log' })
    ]
});

logger.log_and_exit("info","This message *will* be included in the log files.",0)
logger.info("This message *might* be included in the log files.")
process.nextTick(logger.info("This message probably won't be included in the log files.")
setTimeout(logger.info("This message almost certianly won't be included in the log files."),100)

This can also be used to ensure that uncaught exceptions are logged:

require('winston-log-and-exit');
process.on('uncaughtException', function (err) {
    // use `winston` or your own Logger instance as appropriate
    winston.error("Uncaught Exception",err);
    winston.log_and_exit("info","bye",1);
});

Note that the third argument may optionally be a callback which is responsible for calling process.exit() (and if it doesn't, your begging for a memory leak).

winston.log_and_exit("info","bye",function(){
    try{
        DB.close();
        winston.log("This message will NOT get saved to file!")
    }finally{
        process.exit(0);
    }
});
1.0.6

7 years ago

1.0.5

7 years ago

1.0.4

7 years ago

1.0.3

7 years ago

1.0.2

7 years ago

1.0.1

7 years ago

1.0.0

7 years ago