【发布时间】:2013-09-12 08:00:43
【问题描述】:
我正在使用winston 记录一些消息。因为消息很大,我想写成gzip格式。
logger对象的构造函数有一个写流的参数。如果我将文件流传递给它,它就可以工作:
var winston = require('winston');
var out = require('fs').createWriteStream("test.log");
var logger = new (winston.Logger)({
transports: [
new (winston.transports.File)({
stream: out,
json: false
})
]
});
logger.info("test");
将产生test.log
2013-09-12T07:53:14.795Z - info: test
我已经阅读了zlib的文档,其中显示:
这提供了对 Gzip/Gunzip、Deflate/Inflate 和 DeflateRaw/InflateRaw 类的绑定。每个类都采用相同的选项,并且是一个可读/可写的 Stream。
我尝试使用pipe 组合Gzip 和fs 如下:
var winston = require('winston');
var out = require('fs').createWriteStream("test.log");
var gzip = require('zlib').createGzip();
gzip.pipe(out, {end : true});
var logger = new (winston.Logger)({
transports: [
new (winston.transports.File)({
stream: gzip,
json: false
})
]
});
logger.info("test");
但是,test.log 将为空。
如何正确组合gzip和filestream对象?
【问题讨论】: