URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 20157
[ Назад ]

Исходное сообщение
"Squid log parser (perl)"

Отправлено Garry , 28-Авг-02 17:11 
В общем пробую писать парсер на перле, под свои нужды и встретился с такой траблой: кто видел access.log, знает, что там бывают очень длинные строки, такая конструкция не рулит :(
($date, $unuse1, $ip_addr, $unuse2, $unuse3, $unuse4, $url_full, $unuse5, $unuse6, $unuse7) = split(/\s+/, $_);
В $ip_addr заносятся данные, которые вроде бы расположены на одной строке в самом конце, например - DIRECT/194.186.36.134
Как побороть энто?

Содержание

Сообщения в этом обсуждении
"RE: Squid log parser (perl)"
Отправлено Dawnshade , 28-Авг-02 17:57 
Не парься, возьми готовый - http://calamaris.cord.de/



"RE: Squid log parser (perl)"
Отправлено Garry , 29-Авг-02 10:27 
>Не парься, возьми готовый - http://calamaris.cord.de/

Блин я этих парсеров пересмотрел уже целую кучу! Мне вот этого не надо:
Calamaris parses the Squid Native Log and genereates reports
about Peak-usage, Request-Methods, Status-reports of incoming
and outgoing requests, second and Top-level destinations,
content-types and performance.

Мне надо дата, время, сайт - по определенному ip. Больше нахрен ничего не надо.


"RE: Squid log parser (perl)"
Отправлено MG , 29-Авг-02 13:46 
>В общем пробую писать парсер на перле, под свои нужды и встретился
>с такой траблой: кто видел access.log, знает, что там бывают очень
>длинные строки, такая конструкция не рулит :(
>($date, $unuse1, $ip_addr, $unuse2, $unuse3, $unuse4, $url_full, $unuse5, $unuse6, $unuse7) = split(/\s+/,
>$_);
>В $ip_addr заносятся данные, которые вроде бы расположены на одной строке в
>самом конце, например - DIRECT/194.186.36.134
>Как побороть энто?


А ты попробуй ...= split('\s+')
У меня работает


"RE: Squid log parser (perl)"
Отправлено McLoud , 29-Авг-02 13:56 
>В общем пробую писать парсер на перле, под свои нужды и встретился
>с такой траблой: кто видел access.log, знает, что там бывают очень
>длинные строки, такая конструкция не рулит :(
>($date, $unuse1, $ip_addr, $unuse2, $unuse3, $unuse4, $url_full, $unuse5, $unuse6, $unuse7) = split(/\s+/,
>$_);
>В $ip_addr заносятся данные, которые вроде бы расположены на одной строке в
>самом конце, например - DIRECT/194.186.36.134
>Как побороть энто?

Ну, для начала надо использовать "\s+" и плюс к этому время (первое значение в строке) нужно вырезать отдельно, т.к. если через сквид будет проходить файл большой длины и большим временем выполнения, то первые два значения в строке сольются в одно (сам на этом подловился :( мег 200 трафика пропустил пока доехало).


"RE: Squid log parser (perl)"
Отправлено Garry , 29-Авг-02 16:53 
('s+') тоже не рулит. Все решилось проверкой массива на количество элементов.