我正在试图弄清楚如何使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将数据发送到另一个写入流的具体示例,并且记录器仅将流作为目标。
答案 0 :(得分:0)
我认为您的代码应该有效,但zlib
非常擅长缓冲数据,因此在将日志刷新到文件之前可能需要一些时间。
您可以定期手动刷新:
setInterval(function() {
logarchive.flush();
}, 1000); // flush once per second