А.Н.,
Variant можно использовать, но только при использовании метода. операторами нельзя (пока). но методами нормально
а оператор << в документации по Си, которую я читал, обозван "оператором вставки". типа он как-будто вставляет
Модератор: Модераторы
Variant можно использовать, но только при использовании метода. операторами нельзя (пока). но методами нормально
а оператор << в документации по Си, которую я читал, обозван "оператором вставки". типа он как-будто вставляет
Хм... Тогда надо просто сделать перегруженный метод Log с variant параметрами.
А.Н. писал(а):Полный аналог? Т.е., при переопределении <<, переопределится действие shl?
А.Н. писал(а):Хм... Тогда надо просто сделать перегруженный метод Log с variant параметрами.
А.Н. писал(а):Выкладывай, даже недопиленный. Посмотрим. TLogEvent, прежде всего, не устраивает тем, что пересоздаёт лог и косячит с уровнем доступа. Пока что, я только скопирастил его и к стилю своему привёл. Буду постепенно менять. Плюс, у меня свои функции логирования, создающие лог, при обращении.
Надо слить воедино, что у кого есть. Получится что-то путное тогда.
не уверен насчёт сливать, скорее, стоит "сливать" идеи, а не их реализацию. логгер выкладываю, в архиве есть пример. тестировалось под виндой на 9.26 и 9.28. коротко о главном
- лог автоматом логирует все Actions (т.е. при создании переопределяется TApplication.OnAction с последующим запуском сохранённого пользовательского обработчика)
- весь лог висит в памяти (т.к. он есть потомок TStringList)
- есть возможность прицепиться на факт логирования (событие OnLog) для дальнейшей обработки (отсылки на почту, запись в БД и т.д.)
- есть возможность подавлять повторяющиеся логи.
а никто и не отбирает у юзера возможность переопределять самому. запуск TAction логируется всегда, и уже кроме этого - пользователь может сам писать свои обработчики и для TApplication.OnAction, и для TActionList.OnAction.Не лучшая идея. Правильнее, думаю, дать пользователю возможность переопределять самому.
Application.Title := AnsiToUtf8('...');
// Логирование всех исключений.
Application.OnException := @MainLog.OnExceptionLog;
Debug('Initializing...');
Application.Initialize;
Debug('Creating dmData.');
Application.CreateForm(TdmData, dmData);
насчёт системной кодировки - не знаю. юникод - он и в африке юникод, под любой осью.
в нём изначально TLogMan получал настройки от TConfigMan-а, которые определяли уровни логирования, пути и многое другое. этот логер, по-сути, отрывок с заглушками в виде констант, которые изначально ему передавал другой класс, отвечающий за конфигурацию системы. позже я логирование "отделил", т.к. мне показалось это всё достаточно удобным.
идея была в том, что добавил в Uses и всё, пиши LogError, LogInfo, безовсяких геморроев - каталог создаётся, файл создаётся, уровень отладки можно менять "на лету" и т.д.
function TInfInsCompany.LoadSavedRecord(): boolean;
begin
Result := false;
try
[Код, вызывающий исключение];
Result := true;
except
LogException('TInfInsCompany.LoadSavedRecord:');
end;
end;
у меня почему-то не получилось на версиях старше 9.24 вешать один общий перехватчик на TApplicationProperties.OnException. хотя в старом проекте на 9.24 - это живёт.
кстати, в одном проекте у меня исключения не просто логируются, а автоматом делается скриншот формы, активной в момент эксепшена. это можно сделать настраиваемой опцией в логере, и этот скриншот либо писать в заданный каталог, либо копировать в буфер обмена (либо и то, и другое).
но по большому счёту, для обработки именно исключений помимо логера нужен собственный менеджер со своими настройками, имхо.
Сейчас этот форум просматривают: Google [Bot] и гости: 51