![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Работа с логами
123-ий © (2008-06-25 11:36:00)Как лучше организовать сабж? В том смысле, какими методами его лучше читать и писАть в него каку-либо инфу?
123-ий (2008-06-25 11:47:00) [61]
> Ega23 © (25.06.08 11:39) [2]
Вот этот вариант - с помощью TextFile. Делал с помощью него, частенько вылезают глюки, типа файл занят другим приложением. Как вариант было - читать файл с помощью потоков TFileStream. Ещё не пробовал. А был вариант с помощью StringList.LoadFromFile. Работал. Так вот интересно, какой вариант наиболее оптимальный?
clickmaker (2008-06-25 11:39:00) [62]CreateFile - WriteFile - CloseHandle
для ускорения можно открыть один раз и закрыть один раз, но если нужен постоянный монитор лога, то периодически делать FlushFileBuffers.
При записи из нескольких потоков оберни запись в критическую секцию
Ega23 (2008-06-25 11:39:00) [63]Ну вот некая заготовочка, в данный момент в процессе "затачивания"
unit uLogger;
interface
uses SysUtils;
function LogError(const Err : string) : Boolean;
function Log(const LogMess : string) : Boolean;
function LogTo(const Name : string; const LogMess : string) : Boolean;
function LogWithError(const Err : string) : Boolean;
function LogToFile(const FileName, LogMess : string;
const WriteTime : Boolean = False) : Boolean;
implementation
//*****************************************************************************
function LogWithError(const Err : string) : Boolean;
begin
Result := LogError(Err) and Log(Err);
end;
//*****************************************************************************
function LogError(const Err : string) : Boolean;
begin
Result := LogTo('SLErrLog', Err);
end;
//*****************************************************************************
function Log(const LogMess : string) : Boolean;
begin
Result := LogTo('SLLog', LogMess);
end;
//*****************************************************************************
function LogTo(const Name : string; const LogMess : string) : Boolean;
var
DirName, LogFileName : string;
f : TextFile;
begin
Result := True;
DirName := ExtractFilePath(ParamStr(0)) + 'Log\';
LogFileName := DirName + Name + '_' + FormatdateTime('yyyy-mm-dd', Now) + '.log';
if not DirectoryExists(DirName) then
begin
Result := CreateDir(DirName);
if not Result then Exit;
end;
AssignFile(f, LogFileName);
try
try
if not FileExists(LogFileName) then
Rewrite(f)
else
Append(f);
Writeln(f, FormatDateTime('dd.mm.yyyy hh:nn:ss', Now) + ' : ' + LogMess);
except
Result := False;
end;
finally
CloseFile(f);
end;
end;
//*****************************************************************************
function LogToFile(const FileName, LogMess : string; const WriteTime : Boolean) : Boolean;
var
f : TextFile;
begin
AssignFile(f, FileName);
try
try
if not FileExists(FileName) then
Rewrite(f)
else
Append(f);
if WriteTime then
Writeln(f, FormatDateTime('dd.mm.yyyy hh:nn:ss', Now) + ' : ' + LogMess)
else
Writeln(f, LogMess);
Result := True;
except
begin
Result := False;
Exit;
end;
end;
finally
CloseFile(f);
end;
end;
//*****************************************************************************
end.
Palladin (2008-06-25 11:38:00) [64]какими тебе удобно