使用express.logger但写入gzipped日志

时间:2013-11-23 19:12:50

标签: node.js logging express gzip connect

我正在试图弄清楚如何使express.logger函数将其日志写入gzip压缩文件而不是未压缩文本。我尝试了以下代码:

var logarchive = zlib.createGzip();
var logfile = fs.createWriteStream('./logs/access.log.gz');
logarchive.pipe(logfile);

app.use(express.logger({
  format: env.get("logformat", "short"),
  stream: logarchive
}));

但这似乎只是设置了一个非法的gzip存档,其中报告了184Mb的数据,尽管在日志记录操作期间只发送了几个字节。

连接这些东西的正确方法是什么?关于zlib和stream的Nodejs.org api文档没有给出任何关于如何通过zlib将数据发送到另一个写入流的具体示例,并且记录器仅将流作为目标。

1 个答案:

答案 0 :(得分:0)

我认为您的代码应该有效,但zlib非常擅长缓冲数据,因此在将日志刷新到文件之前可能需要一些时间。

您可以定期手动刷新:

setInterval(function() {
  logarchive.flush();
}, 1000); // flush once per second