Я пытаюсь выяснить, как заставить функцию express.logger записывать свои журналы в gzip-файл вместо несжатого текста. Я попытался следующий код:Использование express.logger, но запись gzipped-журналов
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 данных в нем, несмотря на это только получить несколько байтов, отправленных во время операции каротажа.
Каков правильный способ подключения этих вещей? Документация Nodejs.org api по zlib и потокам не дает конкретных примеров того, как добиться получения данных, отправленных через zlib, в другой поток записи, и регистратор принимает только потоки в качестве целей.
Умм не ZLIB нужно знать, когда заканчивается файл. Как вы сжимаете бесконечный поток? – user568109
скажите мне? Был ли этот риторический вопрос, и вы на самом деле имеете в виду «вы не можете этого сделать, потому что zlib не может иметь дело с бесконечно открытыми потоками записи», чтобы сузить, как создавать gzipped-журналы, или вы тоже не знаете? –
Да, вы сжимаете конечные файлы. Обычно автоматические системные регистраторы - это то, что вращают файл, а затем сжимают его. Вам нужен весь файл для чтения для сжатия. – user568109