Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.01 c
7-87726
Dmitrry
2002-12-29 20:19
2003.02.27
Добавление пункта в конт. меню всех файлов и папок


14-87650
down
2003-02-10 16:30
2003.02.27
freevcs


14-87636
ev
2003-02-10 16:32
2003.02.27
kylix 3 и radhat 8


1-87553
Ihtiandr
2003-02-17 11:32
2003.02.27
Пиктограмки


1-87472
Trip
2003-02-18 23:56
2003.02.27
Read





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский