скрипт: исправление глюков в логе REJIK
Исправление глюков в лог-файле программы REJIK.
Есть такая программа REJIK, которая в связке с SQUID используется для
удаления банеров, запрета доступа к некоторому контенту (порнография,
музыка, фильмы) - одним словом для фильтрации трафика.
В старых версиях программы (меньше 3.1) была найдена неприятная ошибка:
при опредленном сформированном запросе (использование непечатаемых
символов %0A) в лог-файл, генерируемый программой, помещалась не одна, а
несколько строк. Например:
2004-11-30 19:23:58 BANNER: 10.0.0.1 - http://some.ua/ (pcre rule#: 27)
2004-11-30 19:23:58 BANNER: 10.10.0.1 - http://bs.yandex.ru/163?ncid=0
63
64
66
164
182
188 (urls rule: bs.yandex.ru)
2004-11-30 19:24:42 BANNER: 10.0.0.1 - http://wm.ban/ (pcre rule#: 18)
Лог-файлы такого вида не удобно просматривать и парсить (особенно уже
готовыми программами).
Я написал автору про эту ошибку, и он, по-моему, ее исправил, но что
делать с уже сгенерированными лог-файлами? Не вручную же "склеивать"
строки? Поэтому я написал маленький скрипт, который сам это делает.
begin rejik.pl #!/usr/bin/perl
# Использовать: ./rejik.pl filename
# Скрипт исправляющий log-файлы после работы rejik старых версий:
# некоторые строки раздяелялись на несколько, что затрудняло дальнейший
# парсинг
# Файлы с которыми работаем
$f_name = @ARGV[0];
$tmp_f_name = $f_name.".tmp";
# Строка предшествующая проверяемой
$b_s = "";
open(F_IN,$f_name) || die "cannot open $f_name for reading: $!";
open(F_OUT,">".$tmp_f_name) || die "cannot open $tmp_f_name for write: $!";
while (<F_IN>) {
$s = $_;
# Если строка не начинается с даты (ГГГГ-ММ-ДД), то склеиваем ее с
# предыдущей,
# Иначе выводим на экран предыдущую строку
if ( !($s =~ /^\d{4}-\d{2}\-\d{2}/)) {
$s = substr($b_s,0,length($b_s)-1).$s;
} else {
print F_OUT $b_s;
}
# Запоминаем предыдущую строку
$b_s = $s;
}
print F_OUT $b_s;
close(F_OUT) || die "can't close $tmp_f_name: $!";
close(F_IN) || die "can't close $f_name: $!";
# Переименование временного результирующего файла в исходный
rename $tmp_f_name, $f_name;
end rejik.pl --
С уважением, Kolotov Alexandr aka mr. Эбола
отвечать: akmypo***@m*****.ru
ICQ: 100349254
| Registered Linux user # 236664 |
-*Информационный канал Subscribe.Ru
Подписан адрес:
Код этой рассылки: comp.soft.linux.kirovlug
Написать в лист: mailto:comp.soft.linux.kirovlug-list@subscribe.ru
Отписаться: mailto:comp.soft.linux.kirovlug--unsub@subscribe.ru?subject=comp.soft.linux.kirovlug
http://subscribe.ru/ http://subscribe.ru/feedback