Главная страница
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
2-1303478474
Handle
2011-04-22 17:21
2011.07.31
как хранить данные


15-1302772506
Дмитрий С
2011-04-14 13:15
2011.07.31
Какова вероятность, что два случайных числа равны.


2-1302768161
DelphiN!
2011-04-14 12:02
2011.07.31
TSQL вычитание NULLa


2-1303458227
ldv
2011-04-22 11:43
2011.07.31
try..except


15-1302559355
Германн
2011-04-12 02:02
2011.07.31
InnoSetup переменная {app}