使用Morgan和Winston进行日志记录 - 正在生成文件,但这些文件是空白的

时间:2015-10-12 20:14:40

标签: javascript node.js winston

这是我的代码:

var logDirectory = __dirname + '/log';

//ensure log directory exists
fs.existsSync(logDirectory) || fs.mkdirSync(logDirectory);

//create a rotating write stream
var accessLogStream = FileStreamRotator.getStream({
filename: logDirectory + '/access-%DATE%.log',
frequency: 'daily',
verbose: false
})

// setup the logger
//app.use(morgan('combined', {stream: accessLogStream}))
app.use(morgan('combined', {stream: logger.stream}))




/*********************************************************************/


//This is 404 for API requests - UI/View 404s should be 
//handled in Angular
app.use(function (req, res, next) {
var err = new Error('Not Found');
err.status = 404;
next(err);
});

app.set('port', 5050);
var server = app.listen(app.get('port'), function () {
//debug('Express server listening on port ' + server.address().port);
console.log('Express server listening on port ' + server.address().port);
});

所有必需的依赖项都是引用,代码引用了一个logger.js文件,其中包含以下代码:

var winston = require('winston');
winston.emitErrs = true;

var logger = new winston.Logger({
transports: [
    new winston.transports.File({
        level: 'info',
        filename: './logs/all-logs.log',
        handleExceptions: true,
        json: true,
        maxsize: 5242880, //5MB
        maxFiles: 5,
        colorize: false
    }),
    new winston.transports.Console({
        level: 'debug',
        handleExceptions: true,
        json: false,
        colorize: true
    })
],
exitOnError: false
});

module.exports = logger;
module.exports.stream = {
write: function(message, encoding){
    logger.info(message);
}
};

正在生成文件,文件名带有时间戳。 为什么我的日志文件中没有任何内容?

2 个答案:

答案 0 :(得分:2)

取代

app.use(morgan('combined', {stream: logger.stream}))

尝试使用

app.use(morgan('default', { 'stream': logger.stream}));

这应该只是将资源和请求以及浏览器信息和timstamp写入all-logs.log文件。

答案 1 :(得分:0)

winston.log不会使用您的传输 logger.info( '试验');将测试记录到控制台和文件,因为这些是您定义的传输。 您的“记录器”是否位于单独的.js文件中,或者与您的快速服务器相同? 这是我在我的快速实现中使用的完整logger.js文件:

https://gist.github.com/pbaio/ac934a06b91b99be6526

我会将它放在父目录中的一个单独文件中,以便您在服务器文件中引用它: var logger = require('.. logger.js');

然后我会像你现在在你的中间那样加入它:

app.use(morgan('combined', {stream: logger.stream}));

我还会删除你的日志目录并让应用程序停止一起创建目录,然后我会手动重新创建日志目录 我想这应该可以解决你的整个问题