2013-11-23 2 views
0

Я пытаюсь выяснить, как заставить функцию 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, в другой поток записи, и регистратор принимает только потоки в качестве целей.

+0

Умм не ZLIB нужно знать, когда заканчивается файл. Как вы сжимаете бесконечный поток? – user568109

+0

скажите мне? Был ли этот риторический вопрос, и вы на самом деле имеете в виду «вы не можете этого сделать, потому что zlib не может иметь дело с бесконечно открытыми потоками записи», чтобы сузить, как создавать gzipped-журналы, или вы тоже не знаете? –

+0

Да, вы сжимаете конечные файлы. Обычно автоматические системные регистраторы - это то, что вращают файл, а затем сжимают его. Вам нужен весь файл для чтения для сжатия. – user568109

ответ

0

Я думаю, что ваш код должен работать, но zlib хорош для буферизации данных, поэтому может потребоваться некоторое время, прежде чем журналы будут сброшены в файл.

Вы можете периодически промывать вручную:

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

Это делает ту же загадку, где он создает файл с кажущимся разумно сжатым размером, но сообщает о огромном контенте (после регистрации он утверждает, что 434B .gz содержит файл журнала 4.3 ГБ) –

+0

@ Mike'Pomax'Kamermans it работает для меня ([gist] (https://gist.github.com/robertklep/43991b2bd1dc1ae49ccc)), хотя gzcat жалуется на неожиданный конец файла (но все равно показывает содержимое) – robertklep

Смежные вопросы