![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
вести логи действий
petrovich © (2011-03-17 14:57:00)нужно логировать определенные дейтсвия в программе и записывать в текстовый файл, как это лучше сделать.
1. AssignFile(), Rewrite(), Write()
2. TFileStream
Loginov Dmitry (2011-03-18 12:42:00) [1]А где не велосипед?
Предложи!
Игорь Шевченко (2011-03-18 00:00:00) [2]
> Рекомендую LDSLogger
Это даже не велосипед, это трактор Беларусь с пятью квадратными колесами
Loginov Dmitry (2011-03-17 23:35:00) [3]Рекомендую LDSLogger
http://matrix.kladovka.net.ru/download.php?getfilename=uploads/other/ldslogger.zip
Перед использованием создается объект логгера:
Log := TLDSLogger.Create('C:\MyApp\Events.log');
для добавления в лога:
Log.LogStr('Текстовое сообщение', тип_сообщения);
Традиционно, к конце работы программы можно удалить объект:
Log.Free;
по умолчанию обрезает файл лога до 1.3МБ. Размер лога настраивается. Вместо обрезки (по размеру или по дате) можно использовать переименование (для минимизации количества операций ввода-вывода).
Имеется куча настраиваемых параметров.
Синхронизация как между потоками, так и между процессами.
Гарантируется немедленный сброс строки на диск (т.е. нет никакой отложенной записи в ОЗУ).
В общем, максимальная надежность при любых условиях, а также приемлемая производительность.
tippa (2011-03-17 18:58:00) [4]procedure LogFile(filepath,str: string );//имя файла и записываемая строка
var F: THandle;
Tmp: string;
begin
F:=CreateFile(pchar(filepath),
GENERIC_WRITE or GENERIC_READ,
FILE_SHARE_READ or FILE_SHARE_WRITE,
nil,
OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
0);
if F = INVALID_HANDLE_VALUE then Exit;
SetFilePointer(F, 0, nil, FILE_END);
Tmp := str + #13#10;
FileWrite(F,pchar(Tmp)^,Length(Tmp));
CloseHandle(F);
end;
oldman (2011-03-17 16:57:00) [5]
> это можно объединить в одну процедуру
в одну строку даже можно
clickmaker (2011-03-17 16:23:00) [6]> S := Format(C_CAN_NOT_CONNECT_TO_DB, [Host, Port, Name,
> user_name, Pass]);
> WriteFile(hlog_file, S[1], Length(S), N, nil);
это можно объединить в одну процедуру
Jeer (2011-03-17 16:07:00) [7]
> пролучается как-то громоздко
Если "пролучается", то не делай.
Громоздко для кого ? Для твоего мозга ?
petrovich (2011-03-17 15:56:00) [8]
> CreateFile, WriteFile
так вот? пролучается как-то громоздко.
if not db_connect(Host, Port, Name, user_name, Pass) then
begin
S := Format(C_CAN_NOT_CONNECT_TO_DB, [Host, Port, Name, user_name, Pass]);
WriteFile(hlog_file, S[1], Length(S), N, nil);
end;
clickmaker (2011-03-17 15:15:00) [9]CreateFile, WriteFile
И. Павел (2011-03-17 15:15:00) [10]Вот тут много готовых вещей насоветовали:
http://forum.vingrad.ru/forum/topic-280053.html