Добрый день.
Есть два вопроса по методу записи лога программы, как идеологический, так и технический.
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); Может кто сталкивался и подскажет где у меня ошибка?
Спасибо.