使用 Morgan 和 Winston 进行日志记录 - 文件正在生成但为空白
Using Morgan and Winston for logging - files are being generated but are blank
这是我的代码:
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);
}
};
正在生成文件并且文件名带有时间戳。
为什么我的日志文件中没有任何内容?
代替
app.use(morgan('combined', {stream: logger.stream}))
尝试使用
app.use(morgan('default', { 'stream': logger.stream}));
这应该只是将资源和请求以及浏览器信息和时间戳写入您的 all-logs.log
文件。
winston.log 不会使用您的交通工具
logger.info('test');将记录测试到控制台和文件,因为它们是您定义的传输。
您的 'logger' 位于单独的 .js 文件中还是与您的 express 服务器相同?
这是我在快速实现中使用的完整 logger.js 文件:
https://gist.github.com/pbaio/ac934a06b91b99be6526
我会把它放在你父目录的一个单独的文件中,这样你就可以在你的服务器文件中引用它:
var logger= require('..logger.js');
然后我会像你现在做的那样把它合并到你的中间:
app.use(morgan('combined', {stream: logger.stream}));
我也会删除你的日志目录,让应用程序停止创建目录,然后我会手动重新创建日志目录
我想这应该可以解决您的整个问题
这是我的代码:
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);
}
};
正在生成文件并且文件名带有时间戳。 为什么我的日志文件中没有任何内容?
代替
app.use(morgan('combined', {stream: logger.stream}))
尝试使用
app.use(morgan('default', { 'stream': logger.stream}));
这应该只是将资源和请求以及浏览器信息和时间戳写入您的 all-logs.log
文件。
winston.log 不会使用您的交通工具 logger.info('test');将记录测试到控制台和文件,因为它们是您定义的传输。 您的 'logger' 位于单独的 .js 文件中还是与您的 express 服务器相同? 这是我在快速实现中使用的完整 logger.js 文件:
https://gist.github.com/pbaio/ac934a06b91b99be6526
我会把它放在你父目录的一个单独的文件中,这样你就可以在你的服务器文件中引用它: var logger= require('..logger.js');
然后我会像你现在做的那样把它合并到你的中间:
app.use(morgan('combined', {stream: logger.stream}));
我也会删除你的日志目录,让应用程序停止创建目录,然后我会手动重新创建日志目录 我想这应该可以解决您的整个问题