Строго типизированный лог
Apr. 26th, 2009 11:28 am![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
А вот интересно, возможна ли такая концепция: писать не текстовый лог, а строго типизированный, чтобы в будущем можно было грузить сохраненные в него объекты и выполнять над ними какие-нибудь запросы?
Сейчас анализ логов сводится к grep, awk и прочей тексто-ориентированной линуксятине. Существует мнение, что это (текстово-ориентированный обмен данными между линуксовыми утилитами через |) хорошо, но у меня это усиленно ассоциируется с электронным прибором, у которого все платы соединены одинаковыми никак не различимыми разъемами, а плата сама решает, "что делать с входным сигналом", т.е. нет никакой защиты от обобщенного индуса-дяди-Васи-телемастера-из-соседнего-гаража.
Плохо то, что большинство интересующих объектов обычно содержат кучу пропертей-ссылок на всякие дебри, которые вне рабочего контекста смысла не имеют, а чтобы их исключить, нужно какой-то флаг на проперть типа атрибута/аннотации "NotLoggable". А это плохо тем, что логгинг не должен требовать лишнего от объектов, с которыми он работает.
Сейчас вывод в лог выглядит следующим образом:
А желательно было бы так:
А DebugAll был бы хитрым метапрограммным макросом, который бы доставал, в зависимости от флагов, имя метода, this, все локальные переменные и параметрами с именами и значениями, сериализовал бы это дело во что-то машинно-читабельное и писал бы в лог.
Сейчас анализ логов сводится к 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, все локальные переменные и параметрами с именами и значениями, сериализовал бы это дело во что-то машинно-читабельное и писал бы в лог.
no subject
Date: 2009-04-26 12:38 pm (UTC)no subject
Date: 2009-04-26 12:56 pm (UTC)no subject
Date: 2009-04-26 01:04 pm (UTC)no subject
Date: 2009-04-26 02:24 pm (UTC)no subject
Date: 2009-04-26 04:16 pm (UTC)no subject
Date: 2009-04-26 04:26 pm (UTC)no subject
Date: 2009-04-26 04:50 pm (UTC)no subject
Date: 2009-04-26 05:11 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2009-04-26 05:13 pm (UTC)Без этого запросы к нему особо не поделаешь. И если сериализовать объекты - в качестве словаря выступает структура класса.
(no subject)
From:(no subject)
From:no subject
Date: 2009-04-26 05:12 pm (UTC)no subject
Date: 2009-04-26 02:46 pm (UTC)no subject
Date: 2009-04-26 03:25 pm (UTC)Опять же - меганабор из grepов, sedов и прочих awkов становится непременим. Как жить дальше?
no subject
Date: 2009-04-26 04:11 pm (UTC)no subject
Date: 2009-04-26 04:25 pm (UTC)no subject
Date: 2009-04-26 04:44 pm (UTC)no subject
Date: 2009-04-26 06:30 pm (UTC)(no subject)
From:no subject
Date: 2009-04-26 05:11 pm (UTC)Конечно, с ними xml не распарсишь, но достать его из базы для обработки каким-нибудь консольным xquery процессором - запросто.
Но я бы предпочел не xml, а автоматически сгенеренную при компиляции строго типизированную схему для логов, тогда чистым SQL можно будет анализировать все что в голову придет.
no subject
Date: 2009-04-26 05:15 pm (UTC)no subject
Date: 2009-04-26 05:19 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2009-04-26 04:12 pm (UTC)no subject
Date: 2009-04-26 05:04 pm (UTC)no subject
Date: 2009-04-26 07:10 pm (UTC)Какую прогу писать???
Есть xmllint, чтобы отформатировать в читабельный вид.
Есть xqilla для тестов и обработки.
no subject
Date: 2009-04-26 11:27 pm (UTC)no subject
Date: 2009-04-27 04:38 am (UTC)Ну, удачи в смотрении глазами 25М лога с мешаниной выводов десятка так подсистем.
no subject
Date: 2009-04-27 11:43 am (UTC)(no subject)
From:(no subject)
From:(no subject)
From: