Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Запись в log


rvi ©   (2009-03-03 12:15:00) 

Добрый день.
Есть два вопроса по методу записи лога программы, как идеологический, так и технический.

1) Способ через StrSaveToFile работает и все просто, но при больших объемах лога слишком расточителен с точки зрения расхода памяти и времени работы с диском.
Поэтому я решил перевести процедуру записи в лог на более низкий уровень, для чего использую процедуру FileWrite. Я считаю, что более правильно дописывать в конец файла, чем переписывать весь файл заного. Или я чего-то не понимаю и можно все оставить как есть?

2) Пример кода:
Procedure AddLog(S: string; LT: TLogType);
var
 LogName: string;
 f: hFile;
 p:PChar;
begin
 Case LT of
   ltError: LogName:='Error.log';
   ltNet: LogName:='Access.log';
 end;
 f:=FileCreate(LogName, ofOpenWrite or ofOpenAlways);
 FileSeek(f, 0, spEnd);
 FileWrite(f, s[1], length(s));
 FileClose(f);
end;


В результате некоторые записи дублируются в файле и порядок не соответствует хронологии. Я грешу на строчку позиционирования указателя на EOF -> FileSeek(f, 0, spEnd); Может кто сталкивался и подскажет где у меня ошибка?
Спасибо.


rvi   (2009-03-03 14:14:00) [1]

Thank you, John, I will try


Jon   (2009-03-03 13:01:00) [2]

From KOL.PAS - works well:


procedure LogFileOutput( const filepath, str: AnsiString );
var
 F: THandle;
 Tmp: AnsiString;
begin
 F := FileCreate( filepath, ofOpenWrite or ofOpenAlways or ofShareDenyWrite );
 if F = INVALID_HANDLE_VALUE then Exit;
 FileSeek( F, 0, spEnd );
 Tmp := str + #13#10;
 FileWrite( F, PAnsiChar( Tmp )^, Length( Tmp ) );
 FileClose( F );
end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо