Логгер

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Логгер

Сообщение А.Н. » 18.07.2010 16:59:13

Слышал, что многие предпочитают использовать логирование. А какими логгерами вы пользуетесь?
Имеются ли готовые решения? У меня намечается небольшая допилка компонента TEventLog.
Могу выложить что получится, если нет ничего лучше, если сделаю и если это кому-то надо.
А.Н.
постоялец
 
Сообщения: 230
Зарегистрирован: 13.03.2010 12:23:58

Re: Логгер

Сообщение yurgel » 18.07.2010 18:35:04

я своим пользуюсь. написан в отдельном модуле, включается автоматически при добавлении в юзес. пять уровней отладки: ошибка, предупреждение, подсказка, информация и системный. в логгере выставляется нужный уровень, и он пишет в лог все сообщения, имеющие статус равный или ниже заданного. соответственно в проге везде, где надо понатыкана запись в лог, но фактически она происходит только для сообщений нужных статусов. системный уровень - это уровень перехвата всех сообщений винды уровня TApplication, используется только для отладки, когда надо буквально попиксельно вопроизвести, куда и как какое-то чудо тыкало пальцами или мышей. в Lazaruse для этих же целей используется Application.UserInput, который хотя бы отлавливает все события мыши и клавы, хоть и очень ограничено (без привязки к координатам - только сам факт). все события хранятся в стринглисте, его можно сохранять или вытащить в Мемо, например. Логер автоматически создаёт директорию для логов, все логи за одни сутки складываются в один файл.

в принципе, тоже могу допилить и выложить, он простой, как валенок.
yurgel
новенький
 
Сообщения: 37
Зарегистрирован: 29.06.2010 16:06:58

Re: Логгер

Сообщение А.Н. » 18.07.2010 18:40:03

Выкладывай, даже недопиленный. :) Посмотрим. TLogEvent, прежде всего, не устраивает тем, что пересоздаёт лог и косячит с уровнем доступа. Пока что, я только скопирастил его и к стилю своему привёл. Буду постепенно менять. Плюс, у меня свои функции логирования, создающие лог, при обращении.
Надо слить воедино, что у кого есть. Получится что-то путное тогда.

Посмотрел что есть (правда под долбонет):
http://www.dotnetlogging.com/comparison/

P.S.:
Кстати, TEventLog, не потокобезопасный. Пока, конечно, не нужно, но...
А.Н.
постоялец
 
Сообщения: 230
Зарегистрирован: 13.03.2010 12:23:58

Re: Логгер

Сообщение hinst » 19.07.2010 13:32:17

я своим пользуюсь. вот выложу. мой доделанный. почти...
потокобезопасность не учитывал. но делал как-то приложение, там было несколько потоков, ну и ничё, как-то работало вполне нормально 8) может, было бы там побольше потоков, было бы хуже...
он входит в состав моей библиотеки EPCL, но так уж и быть, выложу его сейчас отдельно
обратить внимание на fpc.cfg
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
hinst
энтузиаст
 
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Re: Логгер

Сообщение А.Н. » 19.07.2010 14:35:57

Отлично. Первый есть. :)
Думаю, что делать, всё-таки, стоит на базе библиотечного компонента. Я начал (очень медленно) допиливать.
На первой, как руки дойдут, добавлю ротацию и режим доступа, затем выложу.
Ваш лог, пока что, бегло просмотрел.
Порадовало:
log<<'Global variable x is '<< x <<endl;
:D Думаю, всё-таки, что Паскаль, не C++ и потоки вв эмулировать не лучшая идея.
В принципе, впилить перегрузку операторов возможно, но только с {$ifdef fpc}.
Потому что:
1. В идеале, неплохо бы сделать совместимость и с Delphi (и с TP 7 :D ).
2. Всё-таки, стоит ориентироваться на Паскаль.
Если кто хочет использовать операторы, конечно, пожалуйста.
Но, думаю, что их стоит оставить только как дублирование обычных функций.
3. Не все знают C++, а перегрузка операторов - серьёзное изменение семантики, с точки зрения пользователя.
К тому же, ещё и изменение синтаксиса языка. В Паскале нет оператора <<. Плюс, модификаторы.
Это достаточно сложно.

Аналогично с шаблонами.

Потом, а стоит ли делать наследование от TComponent (TEventLog также от него, но я сейчас сделал напрямую от TObject и нормально)? :?:

И должен ли лог выбрасывать исключения?

Добавлено спустя 7 минут 13 секунд:
yurgel писал(а):включается автоматически при добавлении в юзес.

Предлагаю включать автоматически, при вызове любой функции логирования, а не при включении.
А.Н.
постоялец
 
Сообщения: 230
Зарегистрирован: 13.03.2010 12:23:58

Re: Логгер

Сообщение Brainenjii » 19.07.2010 14:43:55

Есть Log4Delphi в crr
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Re: Логгер

Сообщение А.Н. » 19.07.2010 14:57:02

Серьёзная штучка, похоже. Сейчас посмотрю.

Добавлено спустя 16 минут 3 секунды:
Мда... За тем исключением, что он заглох году в 2006-м, логгер хорош. Даже запись в БД есть.

Стоит ли изобретать велосипед? Или стоит допилить свой велосипед, включив некоторые возможности того логгера?

Нашёл ещё такое, хотя и платное:
http://www.raize.com/devtools/codesite/ ... lasses.asp

Добавлено спустя 6 минут:
И он сложный. Плюс в том, что он совместим с Log4J, как я понял. Но это же и минус. На будущее, если надо, стоит допилить возможность чтения конфигурации из внешнего файла в таком формате.
Но, на данный момент, хочется сделать очень простой в использовании логгер без установки.

Т.е., сейчас у меня всё логирование происходит так:
Debug('Creating main form.');
Log('Бла-бла-бла');

И никаких объектов/компонентов/внешних конфигов, создания объектов и т.д..
Доступ к объекту лога есть, но к нему обращаться необязательно.
Хочется сохранить простоту в использовании.
А.Н.
постоялец
 
Сообщения: 230
Зарегистрирован: 13.03.2010 12:23:58

Re: Логгер

Сообщение Brainenjii » 19.07.2010 16:16:35

По-моему, лучше допилить тот велосипед, доработав его всем форумом (где-то тут поднималось предложение, log4delphi взять как базу)
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Re: Логгер

Сообщение А.Н. » 19.07.2010 18:02:07

Стоит ли овчинка..?
Почему не взять за базу TEventLog и "склеить" с log4delphi?
А.Н.
постоялец
 
Сообщения: 230
Зарегистрирован: 13.03.2010 12:23:58

Re: Логгер

Сообщение krab » 19.07.2010 18:07:00

Если бы еще закоммитить эти переделки в CVS (или что у там) Lazarus. Чтобы был нормальный стандартный логгер.
krab
постоялец
 
Сообщения: 108
Зарегистрирован: 17.02.2010 18:23:08

Re: Логгер

Сообщение А.Н. » 19.07.2010 18:08:18

Для начала бы его сделать. :-) А закоммитить всегда успеется.
А.Н.
постоялец
 
Сообщения: 230
Зарегистрирован: 13.03.2010 12:23:58

Re: Логгер

Сообщение hinst » 19.07.2010 18:08:46

А.Н.,
если разработчики FPC ввели оператор << и позволили его перегружать, значит в ФриПаскале он теперь есть.
у меня все действия с << абсолютно точно повторяются с оператором +
так что та строка могла быть также записана
Код: Выделить всё
log + 'Global variable x is ' + x + endl;


и также все действия повторяются методом TextIt
Код: Выделить всё
log.TextIt(['Global variable x is ', x, LineEnding]);

если этот метод сделать public

а модификаторы - что это? всего лишь
Код: Выделить всё
TLogModifier = (logTime, logDate, endl); // вполне стандартная паскальная конструкция


я просто хотел получить максимум возможного. чтобы не писать каждый раз имя метода, чтобы не переводить каждое число IntToStr'ом!
чтобы желающие могли выводить текст методами, другие - операторами, третьи - вообще по-старому, к примеру, так
Код: Выделить всё
log.TextIt('Global variable x is ' + IntToStr(x) + #13#10);
Аватара пользователя
hinst
энтузиаст
 
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Re: Логгер

Сообщение А.Н. » 19.07.2010 18:14:44

если разработчики FPC ввели оператор << и позволили его перегружать, значит в ФриПаскале он теперь есть.

Но это конструкция исключительно FP. Не знаю работает ли он в режимах, кроме fpc?
Это надо сделать дополнительным. Иначе, например, при переносе программ из Delphi или, вообще, при портировании логгера в Delphi, ничего хорошего не получится.

я просто хотел получить максимум возможного. чтобы не писать каждый раз имя метода, чтобы не переводить каждое число IntToStr'ом!

Хм... Кстати, может variant использовать?

чтобы желающие могли выводить текст методами, другие - операторами, третьи - вообще по-старому, к примеру, так

Да, я тоже думаю, что так стоит сделать.
А.Н.
постоялец
 
Сообщения: 230
Зарегистрирован: 13.03.2010 12:23:58

Re: Логгер

Сообщение Sergei I. Gorelkin » 19.07.2010 18:17:19

Оператор << - это аналог shl, так что и с shl тоже будет работать до кучи.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1405
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: Логгер

Сообщение А.Н. » 19.07.2010 18:21:40

Полный аналог? Т.е., при переопределении <<, переопределится действие shl?
А.Н.
постоялец
 
Сообщения: 230
Зарегистрирован: 13.03.2010 12:23:58

След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12

Рейтинг@Mail.ru