Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Работа с логами


Страницы:   1 2 3 4

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]

какими тебе удобно


Страницы:   1 2 3 4

Наверх

Титульная страница Поиск, карта сайта Написать письмо