我正在使用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 对象?