Форум: "KOL";
Текущий архив: 2011.07.31;
Скачать: [xml.tar.bz2];
ВнизЗапись в 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 вся ветка
Форум: "KOL";
Текущий архив: 2011.07.31;
Скачать: [xml.tar.bz2];
Память: 0.44 MB
Время: 0.002 c