metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2009-04-26 11:28 am

Строго типизированный лог

А вот интересно, возможна ли такая концепция: писать не текстовый лог, а строго типизированный, чтобы в будущем можно было грузить сохраненные в него объекты и выполнять над ними какие-нибудь запросы?
Сейчас анализ логов сводится к grep, awk и прочей тексто-ориентированной линуксятине. Существует мнение, что это (текстово-ориентированный обмен данными между линуксовыми утилитами через |) хорошо, но у меня это усиленно ассоциируется с электронным прибором, у которого все платы соединены одинаковыми никак не различимыми разъемами, а плата сама решает, "что делать с входным сигналом", т.е. нет никакой защиты от обобщенного индуса-дяди-Васи-телемастера-из-соседнего-гаража.


Плохо то, что большинство интересующих объектов обычно содержат кучу пропертей-ссылок на всякие дебри, которые вне рабочего контекста смысла не имеют, а чтобы их исключить, нужно какой-то флаг на проперть типа атрибута/аннотации "NotLoggable". А это плохо тем, что логгинг не должен требовать лишнего от объектов, с которыми он работает.

Сейчас вывод в лог выглядит следующим образом:
  mLog.DebugFormat("OnAuthenticateRequest: {0} {1} {2}",
        httpApplication.Request.RawUrl,
        httpApplication.Request.UserAgent,
        httpApplication.Request.UserHostAddress); 


А желательно было бы так:
 
 mLog.Debug("some_user_comment",LogFlags.LocalVars | LogFlags.MethodName | LogFlags.This | LogFlags.Parameters);


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

[identity profile] thesz.livejournal.com 2009-04-26 09:07 am (UTC)(link)
Show/Read Haskell classes are your friends. ;)

[identity profile] lionet.livejournal.com 2009-04-26 09:15 am (UTC)(link)
А сериализуй прям лог-объекты в файл, зачем их маршалить в текст?

[identity profile] guamoka.livejournal.com 2009-04-26 10:01 am (UTC)(link)
А по-моему, ты заморачиваешься. Надо исходить все же из функции лога. Вероятно, для более полного и детального анализа должен служить уже например дамп. И сравнение с платами не совсем корректное. Лог- тестеровочный интерфейс с человеком. Вот когда в плату тестером тыкаешь, ты же смотришь вполне конкретные параметры ограниченного числа типа напряжения/силы тока и т.п.? Ты же не видишь атомную структуру детали, параметры техпроцесса, по которому она была произведена и т.п.? :)
ЗЫ. А вообще, совершенная конструкция- это не та, к которой прибавить уже нечего. Это та, от которой отнять уже нечего. Кажется так какой-то авиаконструктор советский сказал.

[identity profile] mudasobwa.livejournal.com 2009-04-26 10:31 am (UTC)(link)
На реализацию Hibernate гляньте. Там java, конечно, но идей там полно.

[identity profile] madeveloper.livejournal.com 2009-04-26 11:00 am (UTC)(link)
Пишите все в базу данных. Объекты сериализуйте в поле с XML-текстом. Причем современные БД позволяют дескрайбить структуру таких полей и работать с ними в запросах.

[identity profile] permea-kra.livejournal.com 2009-04-26 11:53 am (UTC)(link)
А что за язык?
Имею мнение, что на плюсах это через жопу, но реализуемо.