Форум: "Основная";
Текущий архив: 2003.02.27;
Скачать: [xml.tar.bz2];
ВнизВедение лог-файлов Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.009 c