LINUX.ORG.RU

разбор custom лог файла


0

0

есть лог файл, ведется моей программой. пример таков

+========================>>> TIPC.OpenDevice (04.11.05 13:58:27 796) | +========================>>> TIPC.ReadDevInfo (04.11.05 13:58:27 812) | | +========================>>> TFT3.ExecRequest (04.11.05 13:58:27 812) | | | ACommand = 8 | | | +========================>>> TFT3.SinchSend (04.11.05 13:58:27 828) | | | | Result = 0 | | | `-----[00:00:00 000]-----<<< TFT3.SinchSend (04.11.05 13:58:27 828) | | | +========================>>> TFT3.SinchReceive (04.11.05 13:58:27 828) | | | | Result = 0 | | | `-----[00:00:00 015]-----<<< TFT3.SinchReceive (04.11.05 13:58:27 843) | | | +========================>>> TFT3.SinchReceive (04.11.05 13:58:27 843) | | | | Result = 0 | | | `-----[00:00:00 000]-----<<< TFT3.SinchReceive (04.11.05 13:58:27 843) | | | +========================>>> TFT3.SinchReceive (04.11.05 13:58:27 843) | | | | Result = 0 | | | `-----[00:00:00 000]-----<<< TFT3.SinchReceive (04.11.05 13:58:27 843) | | | Result = 0 | | `-----[00:00:00 031]-----<<< TFT3.ExecRequest (04.11.05 13:58:27 843) | | Result = 0 | `-----[00:00:00 031]-----<<< TIPC.ReadDevInfo (04.11.05 13:58:27 843) | +========================>>> TIPC.OpenDevice (04.11.05 13:58:27 843) | | Result = 0 | `-----[00:00:00 000]-----<<< TIPC.OpenDevice (04.11.05 13:58:27 843) | Result = 0 `-----[00:00:00 047]-----<<< TIPC.OpenDevice (04.11.05 13:58:27 843) +========================>>> TIPC.ReadMomentData (04.11.05 13:58:27 859) | +========================>>> TIPC.ReadMOMMaskData (04.11.05 13:58:27 859) | | +========================>>> TFT3.ExecRequest (04.11.05 13:58:27 859) | | | ACommand = 7 | | | +========================>>> TFT3.SinchSend (04.11.05 13:58:27 859) | | | | Result = 0 | | | `-----[00:00:00 016]-----<<< TFT3.SinchSend (04.11.05 13:58:27 875) | | | +========================>>> TFT3.SinchReceive (04.11.05 13:58:27 875) | | | | Result = 0 | | | `-----[00:00:00 000]-----<<< TFT3.SinchReceive (04.11.05 13:58:27 875) | | | +========================>>> TFT3.SinchReceive (04.11.05 13:58:27 875) | | | | Result = 0 | | | `-----[00:00:00 000]-----<<< TFT3.SinchReceive (04.11.05 13:58:27 875) | | | +========================>>> TFT3.SinchReceive (04.11.05 13:58:27 875) | | | | Result = 0 | | | `-----[00:00:00 000]-----<<< TFT3.SinchReceive (04.11.05 13:58:27 890) | | | +========================>>> TFT3.SinchReceive (04.11.05 13:58:27 890) | | | | Result = 0 | | | `-----[00:00:00 016]-----<<< TFT3.SinchReceive (04.11.05 13:58:27 906) | | | +========================>>> TFT3.SinchReceive (04.11.05 13:58:27 906) | | | | Result = 0 | | | `-----[00:00:00 000]-----<<< TFT3.SinchReceive (04.11.05 13:58:27 906) | | | +========================>>> TFT3.SinchReceive (04.11.05 13:58:27 906) | | | | Result = 0 | | | `-----[00:00:00 015]-----<<< TFT3.SinchReceive (04.11.05 13:58:27 921) | | | +========================>>> TFT3.SinchReceive (04.11.05 13:58:27 921) | | | | Result = 0 | | | `-----[00:00:00 000]-----<<< TFT3.SinchReceive (04.11.05 13:58:27 921) | | | Result = 0 | | `-----[00:00:00 062]-----<<< TFT3.ExecRequest (04.11.05 13:58:27 921) | | Result = 0 | `-----[00:00:00 062]-----<<< TIPC.ReadMOMMaskData (04.11.05 13:58:27 921) | Result = 0 `-----[00:00:00 062]-----<<< TIPC.ReadMomentData (04.11.05 13:58:27 921)

Необходимо из него получить наиболее простым способом, ибо велосипед изобретать не хочется.. такие данные (примерно) сколько было операций и каких (заранее можем не знать всех наименований) сколько учавствовало имен классов (в примере TIPC) с каким результатом закончились сколько у них внутри вызывалось функций с каким результатом каждая закончилась сколько времени сьела каждая и в общем

Можно ли каким то образом это реализовать? заранее спасибо.

anonymous

упс. поправьте кто может? начинается строка либо с + либо с | либо с ` :(

anonymous
()

как же это Вас угораздило такой лог сотворить ? :-)

sed + awk (первый съест всякий мусор, второй разберёт по полям)

или perl - будет и есть и разбирать

далее sort,uniq, прочие textutils или опять-же perl..

я бы остановился на первом варианте - чтобы сделать из вашего лога нечто, пригодное для автоматической обработки. А дальнейшие скрипты делал уже ориентируясь на нормальный формат и по мере необходимости.

MKuznetsov ★★★★★
()
Ответ на: комментарий от MKuznetsov

А вы не могли бы привести пример оформления лога с сохранением функциональности и удобочитаемости?

anonymous
()
Ответ на: комментарий от anonymous

я пользуюсь для журнала отладки форматом :
datetime:fileName:fileLine:funcName:formatedArgs

генерируется макросом :
#define DLOG(fmt,...) do { \
  print_dtime(stderr);/* выводит дату/время в виде YYYYMMDD.HHMMSSmm - чтобы сортировать удобно + реентерабельна */ \
  fprintf(stderr,":%s:%n:%s:  ",__FILE__,__LINE__,__FUNCTION__); \
  fprintf(stderr,fmt,##__VA_ARGS__); \
  fputc('\n',stderr); \
  fflush(stderr); \
}while(0)

аргументы вывожу парами - имя значение - такой вид легко подхатывается скриптовыми языками.

для нормального лога - вместо FILE,LINE,FUNC - просто уникальный ключ
если есть thread`ы то добавляются блокировки.

вуаля - textutils воспринимают как родное, более интелектуальные средства - тож просто.

PS. к приведённому фрагменту не относитесь строго - 
   это не cut&paste - это по памяти, отвечаю не с рабочей машины.

PPS. кол-во и назначение полей может быть произвольным,
  главные принципы - 
    в полях только значимая информация (без "===>" якобы упрощающих),
    поля разделяются ; или \t 
    доп. информация в виде пар {ключ значение} в последнем поле
    во всём проекте единый формат логов.

MKuznetsov ★★★★★
()

У тебя лог на самом деле одной строкой или просто
форматирование в воем постинге неудачное выбрал?
В любом случае несложный скрипт на Perl решит твой проблемы.
Если есть какой конкретный вопрос - спрашивай. Если же не знаешь,
с какой стороны вообще подойти к этоиу делу, то выходов два -
(1) учить Perl благо есть недорогие русские переводы хороших книг)
(2) попросить вашего местного Perl-гуру написать это для тебя, за
деньги там или за пиво :-)

Onanim
()
Ответ на: комментарий от Onanim

Спасибо всем. буду смотреть и пробовать...

формат постинга и правда выбрал неудачный :) давно тут не был...

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.