Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.07.31;
Скачать: CL | DM;

Вниз

Запись в log   Найти похожие ветки 

 
rvi   (2009-03-03 12:15) [0]

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

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); Может кто сталкивался и подскажет где у меня ошибка?
Спасибо.


 
Jon ©   (2009-03-03 13:01) [1]

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;


 
rvi   (2009-03-03 14:14) [2]

Thank you, John, I will try



Страницы: 1 вся ветка

Текущий архив: 2011.07.31;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.009 c
15-1302686513
KSergey
2011-04-13 13:21
2011.07.31
Нужен владелец iPhone для наделать скриншоты одной софтины


6-1221221764
Виталий_д
2008-09-12 16:16
2011.07.31
Send-SendTo / Recv-RecvFrom


2-1303655524
istok
2011-04-24 18:32
2011.07.31
TSemaphore в Delphi7


11-1227416394
Валера
2008-11-23 07:59
2011.07.31
Проблема с скриншотом экрана


2-1303805704
mefodiy
2011-04-26 12:15
2011.07.31
Как сделать reset MemTable