Наверное каждый, кто сталкивался с nginx + анализаторы логов уже в курсе, что у nginx свой формат логов и он не совместим с apache, к которым привыкли всеми любимые Analog, AWStats, WebAlizer.
Эта проблема для последующих логов решается или исправлением main до apache’вского или изменением типа записываемого лога с main на абсолютно совместимый с apache combined.
Например:
After: access_log /var/log/nginx/access_log.log main
Past: access_log /var/log/nginx/access_log.log combined
Но как быть с логами в «неправильном» формате, которые не хочется терять? Ответ один – преобразование в «правильные».
Мне в этом помог самописный скрипт на php
<?php
$fh = fopen('old_log', 'r');
$fh2 = fopen('new_log', 'w');
for ($i=1;!feof($fh);$i++) {
$line = fgets($fh, 4096);
if (fputs($fh2,preg_replace('/([\d\.]+\s-\s-\s.+)(\s\d+)(\s".+")(\s\d+\s.+)\s"-"/','$1$3$2$4',$line))."\n") {echo $i.' - True!'."\n";} else {echo "\n\n".$i.' - Pzdc!'."\n";}
}
fclose($fh);
fclose($fh2);
?>
Материалы использованные для написания (или как написать по своему):
Работа с файлами в PHP. Построчное чтение файлов, передача данных через сокеты.
Регулярные выражения на PHP
Share This Post
Related Posts