Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.02.27;
Скачать: CL | DM;

Вниз

Ведение лог-файлов   Найти похожие ветки 

 
kronprince ©   (2003-02-17 11:45) [0]

У кого есть оригинальные разработки по ведению лог-файлов
(ограничение размера, одновременный вывод в файл/на екран, запись и показ с нескольких источников, сортировка и т.п. ) - поделитесь plz линками или исходниками.

Желательно WinAPI - т.к. столкнулся с проблемой при создании порожденных от TForm в многопоточных приложениях + COM.

UBPFD > Ini-, Log- и др. спецфайлы cмотрел :)))


 
kronprince ©   (2003-02-17 14:46) [1]

Дааа - тяжелая артилерия еще не подъехала :(((


 
Reindeer Moss Eater   (2003-02-17 14:49) [2]

ограничение размера
Как определить размер файла?

одновременный вывод в файл/на екран
Можно ли, имея "один экземпляр" данных, писать их в разные устройства?

показ с нескольких источников
Как открывать файлы не монопольно?

Ты про это спрашиваешь? Или где?


 
Smithson ©   (2003-02-17 14:55) [3]

Он спрашивает про компонент. Если у кого есть, то и мне, и мне!


 
kronprince ©   (2003-02-17 14:56) [4]

2Reindeer Moss Eater (17.02.03 14:49)
Я спрашиваю об этом "У кого есть оригинальные разработки по ведению лог-файлов"

Наверняка у каждого кто делал большие проекты возникала потребность делать не просто TStringList.SavetoFile() - а чего-то посложнее :)
Мой класс по ведению логов может то что я перечислил - но у него есть недостаток - он наследован от TForm :( - и поэтому не потокобезопасный :(((


 
Reindeer Moss Eater   (2003-02-17 14:59) [5]

А зачем класс, тем более наследованный от TForm (?!)
Чем не устраивает модуль, из 10-20 строк, лежащий в папке, перечисленнной в LibraryPath, и навсегда забытая проблема с логами?


 
kronprince ©   (2003-02-17 15:03) [6]

2Reindeer Moss Eater (17.02.03 14:59)
>Чем не устраивает модуль

А тем не устраивает - что нужно смотреть в рантайме содержимое лога - менять настройки и сортировать по источникам
SQL monitor - видел ??? - чтото такого типа :)


 
Reindeer Moss Eater   (2003-02-17 15:05) [7]

unit LogUnit;

interface

procedure Log(const AMsg : string; const AParam:string = "");

implementation

uses SyncObj, SysUtils;

var LogName : string;
cs : TCriticalSection = nil;

procedure Log(const AMsg : string; const AParam : string = "");
var F:Text;
begin
try
cs.Enter;
Assign(F,LogName);
if FileExists(LogName) then Append(F) else Rewrite(F);
Writeln(F,FormatDateTime("dd.mm.yyyy hh:mm:ss",Now),#9,AMsg,#9,AParam);
finally
Close(F);
cs.Leave;
end;
end;


initialization
cs:=TCriticalSection.Create;
LogName:=ChangeFileExt(ParamStr(0),".log");
finalization
cs.Free;
end.

И смотри себе наздоровье в рантайме, или перед сном лог. Как удобнее.


 
kronprince ©   (2003-02-17 15:10) [8]

2Reindeer Moss Eater (17.02.03 15:05)
Угу - очень просто и красиво :)))

А на экран ???
А разрешить/запретить сообщения отпределенного типа ?
А фильтровать по источнику сообщений ?


 
Reindeer Moss Eater   (2003-02-17 15:15) [9]

А на экран ???
Far + F3

А разрешить/запретить сообщения отпределенного типа ?
if SomeKindOvEventAllowed then Log(.....

А фильтровать по источнику сообщений ?
Это уже совсем другая история ....



 
kronprince ©   (2003-02-17 15:20) [10]

2Reindeer Moss Eater (17.02.03 15:15)
>Far + F3
Ой - не смешите меня после пива :)))

>if SomeKindOvEventAllowed then Log(.....

if not (iType in FSetTypeMsg)
then exit;


>Это уже совсем другая история ....
От... бачиш :( - а я хочу саме цю :)


 
kronprince ©   (2003-02-17 15:33) [11]

2Reindeer Moss Eater (17.02.03 15:15)
У тебя аська есть ???


 
Reindeer Moss Eater   (2003-02-17 15:41) [12]

Надеешься получить от меня готовое решение?


 
panov ©   (2003-02-17 17:21) [13]

Можно реализовать по такому принципу (нашел первую попавшую на глаза реализацию - как-то занимался этим):

unit uTLog;
interface
uses
classes,Sysutils, windows,FileCtrl;
type

TLog = class(TThread)
private
FName: String;
FHandle: Integer;
FMaxSize: Integer;
procedure Open;
procedure Arhive;
public
constructor Create(aMaxSize:Integer);
destructor Destroy; override;
procedure Execute; override;
procedure Write(s: String);
end;

implementation
uses
uForm1;

constructor TLog.Create(aMaxSize:Integer);
begin
inherited Create(True);
FreeOnTerminate := True;
FName := AnsiUpperCase(ParamStr(0));
FName := StringReplace(FName,".EXE",".LOG",[]);
FMaxSize := aMaxSize;
Open;
Resume;
end;

procedure TLog.Open;
begin
if not FileExists(FName) then
begin
try
FHandle := FileCreate(FName);
finally
FileClose(FHandle);
end;
end;
FHandle := FileOpen(FName,fmOpenReadWrite+fmShareDenyNone);
if FileSeek(FHandle,0,2)>1024*FMaxSize then
begin
FileClose(FHandle);
Arhive;
Open;
end;
end;

procedure TLog.Arhive;
var
fNameAr: String;
begin
try
if not DirectoryExists(ExtractFilePath(ParamStr(0))+"ArchLog") then
begin
ForceDirectories(ExtractFilePath(ParamStr(0))+"ArchLog");
end;
fNameAr := FormatDateTime("ddmm_hhnnss.ar",now);
CopyFile(PChar(FName),PChar(ExtractFilePath(ParamStr(0))+"ArchLog\"+FNameAr),False);
DeleteFile(PChar(FName));
except
end;
end;

procedure TLog.Write(s: String);
var
ps: String;
begin
cs.Enter; //вход в критическую секцию
ps := FormatDateTime("dd.mm.yyyy hh:nn:ss ",now) + s+Chr(13)+Chr(10);
FileWrite(FHandle,ps[1],Length(ps));
if FileSeek(FHandle,0,2)>1024*1024 then
begin
FileClose(FHandle);
Arhive;
Open;
end;
cs.Leave;
end;

procedure TLog.Execute;
begin
while not Terminated do
begin
Sleep(1);
end;

end;

destructor TLog.Destroy;
begin
FileClose(FHandle);
inherited;
end;
end.



 
Игорь Шевченко ©   (2003-02-17 17:25) [14]

А вот есть в Win2k такая служба Eventlog называется - она все-все сама делает...И даже в пользовательские логи писать :-)



Страницы: 1 вся ветка

Текущий архив: 2003.02.27;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.034 c
1-87358
serg111
2003-02-14 23:01
2003.02.27
как узнать цвет pixel а


9-87233
NudeRaven
2002-09-18 20:39
2003.02.27
Как В Dx грузить файлы jpg,gif итд


3-87268
Andrio
2003-02-08 15:33
2003.02.27
Триггер на SQL для IB6


14-87626
Fiend
2003-02-10 15:43
2003.02.27
ИБ и я!


6-87605
kolerkow
2003-01-09 23:50
2003.02.27
e-mail