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] permea-kra.livejournal.com 2009-04-27 11:22 am (UTC)(link)
>>не переэкспортируют его.
Они могут пользовать его внутри себя. Удачи.

[identity profile] migmit.vox.com (from livejournal.com) 2009-04-27 11:27 am (UTC)(link)
> Они могут пользовать его внутри себя.

...для реализации чисто функционального интерфейса. В противном случае мы имеем баг в библиотеке, и от неё действительно нужно отказаться.

[identity profile] theiced.livejournal.com 2009-04-27 11:43 am (UTC)(link)
Ну вот как то спокойно смотрю глазами (cat | grep | grep | tail -n 20) 200мегабайтный лог.

[identity profile] theiced.livejournal.com 2009-04-27 01:40 pm (UTC)(link)
Ситуацию описываем, да.

[identity profile] theiced.livejournal.com 2009-04-27 01:40 pm (UTC)(link)
Я не могу ответить на этот вопрос. Потому что или человек сам понимает, или его уже ничего не спасёт.

[identity profile] metaclass.livejournal.com 2009-04-27 02:24 pm (UTC)(link)
Есть два противоположных мнения на этот счет. Первое - использовать СУБД и ее возможности по полной программе. Второе - изолироваться от нее слоем абстракции, а логику всю писать единообразно для всех баз.
Оба мнения обоснованные, сознательно и аргументированно выбрать между ними при реализации системы с нуля невозможно без предварительных данных.
Я бы предпочел третий вариант - писать структуры данных и логику единую для всех баз, а затем компилировать их в конкретный диалект SQL и структуры данных конкретной СУБД, но это безумие и оверкилл для 99% моих проектов, т.к. сложность реализации такой вещи перекрывает все сложности с ручной реализацией достаточного для работы функционала на одной или даже нескольких реально нужных СУБД.

[identity profile] metaclass.livejournal.com 2009-04-27 02:25 pm (UTC)(link)
Регэкспы даже по самому своему названию не умеют работать с иерархическими структурами, а вот насчет XQuery не знаю, но предполагаю, что должен уметь.

[identity profile] permea-kra.livejournal.com 2009-04-27 02:32 pm (UTC)(link)
Вы ж не хотели запускать говнософт -).

[identity profile] theiced.livejournal.com 2009-04-27 03:25 pm (UTC)(link)
СУБД должна уметь сохранять данные отдавать их. Логика в СУБД нарушает KISS.

[identity profile] metaclass.livejournal.com 2009-04-27 04:41 pm (UTC)(link)
В сложных системах часто бывает не один клиент к СУБД, и хотелось бы, чтобы бизнес-правила нельзя было нарушить, даже подключившись напрямую родной утилитой от СУБД к базе. И чтобы подобные действия писались в лог. А это без логики на стороне СУБД вообще не делается.

[identity profile] madeveloper.livejournal.com 2009-04-27 05:02 pm (UTC)(link)
Дело на самом деле в том, что кто-то начал рассуждать не о human-readabilty, а о выразительности того или иного языка, признав читаемым лишь один. XML может понять любой человек, которому понадобилось взять из него данные.

http://en.wikipedia.org/wiki/Human-readable

Что касается избыточности и "мусора", то, следуя Вашей логике, консоль следует признать более выразительной чем GUI. Может и так, но она от этого не становиться более human-friendly.

[identity profile] madeveloper.livejournal.com 2009-04-27 05:22 pm (UTC)(link)
Спасет от чего? И в чем принципиальная разница кода выполняемого сервером БД "не отходя от кассы" и кода, гоняющего трафик по сети и выполняемого на клиентской машине? Она если и есть, то не в пользу последнего. При принятии правил именования пакетов и процедур, либо введения метаданнх в БД, я имею возможность автоматически генерировать структуры хранимых классов с методами для выбранного языка программирования. Я могу вносить изменения в БЛ без перекомпиляции настольных приложений. Имею возможность сделать БД более безопасной, более настраиваемой в плане прав доступа. При этом аналитические задачи требуют в разы меньшего сетевого трафика и нагрузки на клиента. Я минусов не вижу вообще.

[identity profile] migmit.vox.com (from livejournal.com) 2009-04-27 05:46 pm (UTC)(link)
> XML может понять любой человек, которому понадобилось взять из него данные.

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

Только времени у него это займёт немеряно.

> следуя Вашей логике, консоль следует признать более выразительной чем GUI.

Вывод не понял. Консоль часто более выразительна, но далеко не всегда.

> она от этого не становиться более human-friendly.

А это вообще омерзительное понятие. Компьютерная программа - мой раб. Я не хочу, чтобы раб был ко мне дружелюбен.

[identity profile] metaclass.livejournal.com 2009-04-27 06:26 pm (UTC)(link)
Не, сейчас мода вообще на клиентской машине ничего кроме браузеров не держать, а весь код выполнять на веб-сервере/сервере-приложений.
Я нечто похожее сейчас проектирую/делаю, но клиент немного более интеллектуальный, и таки, скорее всего, придется логику из БД убирать - хочу сделать поддержку разнообразных баз.
Но тем не менее, логика в виде сложных запросов-отчетов в виде SQL останется в базе - если это писать на каком-нибудь c# (LINQ у меня нет - влом к 3.5 фреймворку привязываться и деплоить его) или дельфи - кода будет как бы не больше, чем SQL-запросов во всех возможных диалектах :)

[identity profile] madeveloper.livejournal.com 2009-04-27 06:36 pm (UTC)(link)
> Только времени у него это займёт немеряно.

Именно поэтому сравнение совершенно неуместно.

> Вывод не понял. Консоль часто более выразительна, но далеко не всегда.

Я тоже ваших выводов не понимаю. Вы всегда крайне категоричны в оценках и делите все на массу остоя и "моя-прелесть".

> Компьютерная программа - мой раб. Я не хочу, чтобы раб был ко мне дружелюбен.

Ваше право. Только к общедисциплинным вопросам это отношения не имеет.

[identity profile] migmit.vox.com (from livejournal.com) 2009-04-27 06:51 pm (UTC)(link)
> Именно поэтому сравнение совершенно неуместно.

Именно поэтому оно в яблочко.

> Я тоже ваших выводов не понимаю.

Задавайте вопросы. И желательно сразу.

> Вы всегда крайне категоричны в оценках

Разумеется. Вы ждали толерантности и политкорректности?

> делите все на массу остоя и "моя-прелесть".

Отнюдь. Просто пока ваши варианты проходят по разряду "отстой".

[identity profile] madeveloper.livejournal.com 2009-04-27 07:16 pm (UTC)(link)
Я на поддержку разнообразных баз забил. Слишком много "вкусностей" предлагает тот же оракл, чтобы отказываться от них в угоду переносимости. Помню как переводили одну из первых версий системы с Interbase на Oracle. Причем система использовала практически голый ANSI SQL. Главный разработчик сказал что перенесем за пару недель (вобщем в BDE только драйвер сменить, да данные смигрировать). В итоге через год получили совсем другую систему...

[identity profile] theiced.livejournal.com 2009-04-27 08:50 pm (UTC)(link)
Дык это не говнософт а стандартные утилитки которые используются без участия головного моска.

[identity profile] theiced.livejournal.com 2009-04-27 08:51 pm (UTC)(link)
Ну - тогда мидлваре - хренотень которая принимает запросы (причём уже не говносикль запросы, а нечто более высокоуровневое, предметноориентированное) и отдаёт данные.

[identity profile] theiced.livejournal.com 2009-04-27 08:53 pm (UTC)(link)
Оракель? Вкусностей? Не - ну если кучу говна называть вкусностями - то да, предлагает.

[identity profile] permea-kra.livejournal.com 2009-04-28 05:22 am (UTC)(link)
дык и xqilla/xmllint после некоторого времени используется без участия головного мозга. А гибкость в выборке она обеспечивает на порядки большую.

[identity profile] permea-kra.livejournal.com 2009-05-03 02:05 pm (UTC)(link)
Умеет. Более того, можно его средствами статистику подбивать и прочее. Минус - если логи жирные, нужно аккуратно выбирать процессор и составлять запросы, чтобы оно не попыталось весь лог пачкой всосать.

Page 4 of 4