Логгер

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

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

Re: Логгер

Сообщение hinst » 19.07.2010 18:22:55

А.Н.,
Variant можно использовать, но только при использовании метода. операторами нельзя (пока). но методами нормально
а оператор << в документации по Си, которую я читал, обозван "оператором вставки". типа он как-будто вставляет
Аватара пользователя
hinst
энтузиаст
 
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Re: Логгер

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

Variant можно использовать, но только при использовании метода. операторами нельзя (пока). но методами нормально

Хм... Тогда надо просто сделать перегруженный метод Log с variant параметрами.
Но это позже. Сейчас бы ротацию сделать.
Потом, в TFileStream, то ли ошибка, то ли недоработка. :-|

а оператор << в документации по Си, которую я читал, обозван "оператором вставки". типа он как-будто вставляет

o.O В C это сдвиг влево. А там, наверное, была документация по C++ и имелись ввиду потоки. Там он тоже переопределён.
А.Н.
постоялец
 
Сообщения: 230
Зарегистрирован: 13.03.2010 12:23:58

Re: Логгер

Сообщение hinst » 19.07.2010 18:34:01

Хм... Тогда надо просто сделать перегруженный метод Log с variant параметрами.

ну дык а я что сказал? есть у мну уже такой. или про что вы спрашивали?
Аватара пользователя
hinst
энтузиаст
 
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Re: Логгер

Сообщение Sergei I. Gorelkin » 19.07.2010 18:45:58

А.Н. писал(а):Полный аналог? Т.е., при переопределении <<, переопределится действие shl?

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

Re: Логгер

Сообщение Odyssey » 19.07.2010 22:35:48

А.Н. писал(а):Хм... Тогда надо просто сделать перегруженный метод Log с variant параметрами.

А может добавить LogFmt, аналогичную Format, но выводящую строку в лог? Так же как сделано с Exception.CreateFmt.
Odyssey
энтузиаст
 
Сообщения: 580
Зарегистрирован: 29.11.2007 17:32:24

Re: Логгер

Сообщение А.Н. » 19.07.2010 22:39:29

2hinst:
Не заметил с variant. Может, я плохо смотрел.

2Odyssey:
Уже есть. И логирование Exception, кстати, есть, чтобы Application.OnException логировать, по-человечески.
Но со строкой, всё-равно, не всегда удобно.

Добавлено спустя 5 минут 51 секунду:
Да... Конечно, у log4delphi понтовая система "appender'ов" и куча тестов... Даже ротация отдельным "подключаемым модулем" сделана. Но ладно. Слюни, пока что распускать не буду, допилю что есть.
Потом уже стоит действительно подумать о допиле log4delphi. Если кому-то правда нужен мощный лог в delphi и lazarus.
А.Н.
постоялец
 
Сообщения: 230
Зарегистрирован: 13.03.2010 12:23:58

Re: Логгер

Сообщение Brainenjii » 19.07.2010 23:03:47

ИМХО, стоит всё-таки доделать log4delphi, прикрепить к нему экспорт лога по email и прочие плюшки... Но оставить возможность простенького лога, на уровне тех самых Debug('блабла');
А все эти << от лукавого... ИМХО, лучше что-нибудь вроде
Procedure Log(Const aString: String; aParams: Array Of Const);
И потом писать Log('Произошла ошибка: %s номер %d', ['мы все умрём', i]);
Не идеально, но всё-таки чуть ближе к паскалевскому...
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Re: Логгер

Сообщение yurgel » 21.07.2010 18:46:30

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


не уверен насчёт сливать, скорее, стоит "сливать" идеи, а не их реализацию. логгер выкладываю, в архиве есть пример. тестировалось под виндой на 9.26 и 9.28. коротко о главном:

- логгер автоматически создаётся и освобождается
- для логирования есть 5 предопределённых процедур (соответственно уровням отладки): LogError, LogWarning, LogHint, LogInfo и LogSystem.
- лог автоматом логирует все Actions (т.е. при создании переопределяется TApplication.OnAction с последующим запуском сохранённого пользовательского обработчика)
- весь лог висит в памяти (т.к. он есть потомок TStringList)
- есть возможность прицепиться на факт логирования (событие OnLog) для дальнейшей обработки (отсылки на почту, запись в БД и т.д.)
- есть возможность подавлять повторяющиеся логи. (используется для уровней отладки SYSTEM, если юзер ведёт мышкой по экрану - логируется только первое сообщение)

подчеркну, что логер писался под вполне конкретные задачи, и делает он ровно то, для чего писался :) на универсализм никто не претендует. работает в Delphi и Lazaruse в нескольких проектах пока без нареканий.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
yurgel
новенький
 
Сообщения: 37
Зарегистрирован: 29.06.2010 16:06:58

Re: Логгер

Сообщение А.Н. » 21.07.2010 19:28:39

не уверен насчёт сливать, скорее, стоит "сливать" идеи, а не их реализацию. логгер выкладываю, в архиве есть пример. тестировалось под виндой на 9.26 и 9.28. коротко о главном

У меня до ротации всё руки не дойдут никак. Всё остальное, с грехом сделал.
А так, сливать идеи, конечно, хорошо. Но долго и с ошибками, без реализации.
К тому же, не понятно будет ли идея работать (это в общем, а не только для программ).

- лог автоматом логирует все Actions (т.е. при создании переопределяется TApplication.OnAction с последующим запуском сохранённого пользовательского обработчика)

Не лучшая идея. Правильнее, думаю, дать пользователю возможность переопределять самому.

- весь лог висит в памяти (т.к. он есть потомок TStringList)

Тоже, не самый гут. Хочется иметь возможность посмотреть что там натворилось, в процессе работы.

- есть возможность прицепиться на факт логирования (событие OnLog) для дальнейшей обработки (отсылки на почту, запись в БД и т.д.)

Это определённо хорошая идея. В текущем (который я так и не скинул) логгере нету.
Но... У log4delphi есть appender'ы. С его архитектурой нужно подумать требуются ли события.
Хотя... Лишним не будет.

- есть возможность подавлять повторяющиеся логи.

Тоже нормальная идея.

Кстати, что сразу бросилось в глаза - юникод в логе. Не гут. Лучше использовать системную кодировку.
Перекодирование я уже реализовал. Выложу, пока что, то, что есть. Сыро, конечно. Половина не работает. property не определены. Ротации нет (и ещё много чего, пишет в один файл). Но хоть что-то.

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

Re: Логгер

Сообщение yurgel » 21.07.2010 19:39:49

насчёт системной кодировки - не знаю. юникод - он и в африке юникод, под любой осью.

Не лучшая идея. Правильнее, думаю, дать пользователю возможность переопределять самому.
а никто и не отбирает у юзера возможность переопределять самому. запуск TAction логируется всегда, и уже кроме этого - пользователь может сам писать свои обработчики и для TApplication.OnAction, и для TActionList.OnAction.

я, в общем, согласен с твоими замечаниями, просто повторюсь, этот класс писался под вполне конкретные задачи. и меня лично он вполне устраивает ;)

но по большому счёту, это кусок одного большого и страшного проекта, который весь состоял из подобных модулей. в нём изначально TLogMan получал настройки от TConfigMan-а, которые определяли уровни логирования, пути и многое другое. этот логер, по-сути, отрывок с заглушками в виде констант, которые изначально ему передавал другой класс, отвечающий за конфигурацию системы. позже я логирование "отделил", т.к. мне показалось это всё достаточно удобным.

идея была в том, что добавил в Uses и всё, пиши LogError, LogInfo, безовсяких геморроев - каталог создаётся, файл создаётся, уровень отладки можно менять "на лету" и т.д.
yurgel
новенький
 
Сообщения: 37
Зарегистрирован: 29.06.2010 16:06:58

Re: Логгер

Сообщение А.Н. » 21.07.2010 19:41:45

Да, типа примеров использования:
Код: Выделить всё
  Application.Title := AnsiToUtf8('...');
  // Логирование всех исключений.
  Application.OnException := @MainLog.OnExceptionLog;
  Debug('Initializing...');
  Application.Initialize;
  Debug('Creating dmData.');
  Application.CreateForm(TdmData, dmData);


Добавлено спустя 2 минуты 4 секунды:
насчёт системной кодировки - не знаю. юникод - он и в африке юникод, под любой осью.

Но неудобно просматривать обычным неюникодным просмотрщиком. Например, Far. :-)

в нём изначально TLogMan получал настройки от TConfigMan-а, которые определяли уровни логирования, пути и многое другое. этот логер, по-сути, отрывок с заглушками в виде констант, которые изначально ему передавал другой класс, отвечающий за конфигурацию системы. позже я логирование "отделил", т.к. мне показалось это всё достаточно удобным.

А, тогда понятно.

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

Такая же идея. Чем проще - тем лучше.

Добавлено спустя 22 часа 20 минут 4 секунды:
Добавил функцию для простого логирования исключений.

Вызывается примерно так:
Код: Выделить всё
function TInfInsCompany.LoadSavedRecord(): boolean;
begin
  Result := false;
  try
    [Код, вызывающий исключение];
    Result := true;
  except
    LogException('TInfInsCompany.LoadSavedRecord:');
  end;
end;


Вся информация об исключении будет добавлена автоматически.
Возможно вызвать и просто: LogException(). Но сейчас какая-то фигня с отладочной информацией.
Ротацией и прочими доделками (а также изучением log4delphi) займусь на выходных, если время останется.

Кстати, чем возможно заменить TFileStream, при записи в файл? Охота, чтобы запись производилась постоянно, была возможность добавления в конец файла и файл не блокировался.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
А.Н.
постоялец
 
Сообщения: 230
Зарегистрирован: 13.03.2010 12:23:58

Re: Логгер

Сообщение yurgel » 22.07.2010 18:14:41

у меня почему-то не получилось на версиях старше 9.24 вешать один общий перехватчик на TApplicationProperties.OnException. хотя в старом проекте на 9.24 - это живёт.

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

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

Re: Логгер

Сообщение А.Н. » 22.07.2010 18:23:33

у меня почему-то не получилось на версиях старше 9.24 вешать один общий перехватчик на TApplicationProperties.OnException. хотя в старом проекте на 9.24 - это живёт.

У меня версия 9.28 (я так и не обновил). Работает нормально. Но там ещё есть функции для логирования исключений без перехватчика в try/except блоке.

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

Это возможно сделать доп. функциональностью. Скриншот - штука хорошая, но очень специфично для задачи и не так часто нужно. В log4delphi есть appender'ы - типа модулей вывода (на консоль, в null, в сист. лог, в файл, на почту и т.д.). Вот я думаю, что сделать подобную "плагинную" модель.
В любом случае, log4delphi я ещё покопаю, т.к. он заслуживает изучения.
И создание скриншотов возможно будет прикрутить.

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

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

Re: Логгер

Сообщение yurgel » 22.07.2010 18:48:35

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

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

з.ы. - повторюсь, это сугубая имха.
yurgel
новенький
 
Сообщения: 37
Зарегистрирован: 29.06.2010 16:06:58

Re: Логгер

Сообщение krab » 26.07.2010 14:06:15

krab
постоялец
 
Сообщения: 108
Зарегистрирован: 17.02.2010 18:23:08

Пред.След.

Вернуться в Lazarus

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

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

Рейтинг@Mail.ru