LogFile System

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
Artus
Beiträge: 280
Registriert: 15.01.2005 20:53

LogFile System

Beitrag von Artus »

Hi Leute,
ich weis nich ob es sowas hier schon gibt oder nich also poste ich mal mein LogFile-System welches sehr nützlich ist um Fehler aufzuspüren falls mal ein Absturtz kommt und man nich weis was gerade los war oder um Meldungen in einer Datei austugeben was gerade oder während des Programmes passiert, besonders gut wenn man es ohne Debugger laufen hat.

mfg

Code: Alles auswählen

;//###################################################//;
;//# Logfile.pbi
;//# by Arthur
;//###################################################//;

#EOL            = Chr(13)
#Log_File       = 10
#Log_FAIL       = #False
#Log_OK         = #True
#Log_Black      = "<font color=black>"
#Log_Red        = "<font color=red>"
#Log_Green      = "<font color=green>"
#Log_Blue       = "<font color=blue>"
#Log_Purple     = "<font color=purple>"

Declare Log_Create(LogName.s)
Declare Log_WriteTopic(Topic.s, Size.b)
Declare Log_TextOut(Text.s)
Declare Log_TextOutN(Text.s)
Declare Log_TextOut_C(Color.s, List.b, Text.s)
Declare.b Log_ProcResult(Name.s, Result.b)

Procedure Log_Create(LogName.s)
  CreateFile(#Log_File,LogName+".html")
  WriteStringN(#Log_File,"<html><head><title>Logfile</title></head>")
  WriteStringN(#Log_File,"<body><font face='courier new'>")
  Log_WriteTopic("Logfile", 5)
  CompilerIf #PB_Compiler_Debugger 
    WriteStringN(#Log_File,"BUILD: DEBUG<br>")
  CompilerElse
    WriteStringN(#Log_File,"BUILD: RELEASE<br>")
  CompilerEndIf
   WriteStringN(#Log_File,FormatDate("%hh:%ii:%ss [%dd.%mm.%yyyy]",Date())+"<br><br>")
EndProcedure

Procedure Log_WriteTopic(Topic.s, Size.b)
  WriteStringN(#Log_File,"<table cellspacing='0' cellpadding='0' width='100%%' bgcolor='#DFDFE5'>")
  WriteStringN(#Log_File,"<tr>"+#EOL+"<td>"+#EOL+"<font face='arial' size='"+Str(Size)+"'>")
  WriteStringN(#Log_File,Topic)
  WriteStringN(#Log_File,"</font>"+#EOL+"</td>"+#EOL+"</tr>"+#EOL+"</table><br>")
  FlushFileBuffers(#Log_File)
EndProcedure


Procedure Log_TextOut(Text.s)
  WriteString(#Log_File,Text)
  FlushFileBuffers(#Log_File)
EndProcedure

Procedure Log_TextOutN(Text.s)
  WriteStringN(#Log_File,Text+"<br>")
  FlushFileBuffers(#Log_File)
EndProcedure

Procedure Log_TextOut_C(Color.s, List.b, Text.s)
  If List = #True : WriteStringN(#Log_File,"<li>") : EndIf
  WriteStringN(#Log_File,Color+Text+"</font>")
  If List = #False : WriteStringN(#Log_File,"<br>") : Else : WriteStringN(#Log_File,"</li>") : EndIf
  FlushFileBuffers(#Log_File)
EndProcedure


Procedure.b Log_ProcResult(Name.s, Result.b)

  If Result = #Log_OK
		WriteStringN(#Log_File,"<table width='100%%' cellSpacing='1' cellPadding='5' border='0' bgcolor='#C0C0C0'>")
		WriteStringN(#Log_File,"<tr><td bgcolor='#FFFFFF' width='35%%'>"+Name+"</TD>")
		WriteStringN(#Log_File,"<td bgcolor='#FFFFFF' width='30%%'><font color ='green'>OK</FONT></TD><td bgcolor='#FFFFFF'")
		WriteStringN(#Log_File,"width='35%%'>-/-</TD></tr></table>")
  Else
    WriteStringN(#Log_File,"<table width='100%%' cellSpacing='1' cellPadding='5' border='0' bgcolor='#C0C0C0'>")
    WriteStringN(#Log_File,"<tr><td bgcolor='#FFFFFF' width='35%%'>"+Name+"</TD>")
		WriteStringN(#Log_File,"<td bgcolor='#FFFFFF' width='30%%'><font color ='red'>ERROR</FONT></TD><td bgcolor='#FFFFFF'")
		WriteStringN(#Log_File,"width='35%%'>-/-</TD></tr></table>")
  EndIf
  FlushFileBuffers(#Log_File)
  ProcedureReturn Result
EndProcedure
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: LogFile System

Beitrag von Kiffi »

Artus hat geschrieben:

Code: Alles auswählen

CreateFile(#Log_File,LogName+".html")
Bitte IMMER den Rückgabewert von CreateFile() auswerten und
entsprechend darauf reagieren.

OpenFile() mit einem anschließenden FileSeek(Lof(Kanal)) würde sich hier im
übrigen auch gut für kontinuierliche Log-Files anbieten.

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
Artus
Beiträge: 280
Registriert: 15.01.2005 20:53

Beitrag von Artus »

Aso ja ^^, hab die in nur so kurz hingeschmiert, und in der schnelle hab ich gar nich so darauf geachte. Hast recht kannst ja einbauen^^.

mfg
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

Artus hat geschrieben:hab die in nur so kurz hingeschmiert,
Dann 'schmier' bitte demnächst nicht in das Forum 'Code, Tipps und Tricks'
PureBoard hat geschrieben:Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf
jeden Fall funktionieren und sollten möglichst effizient, elegant und
beispielhaft oder einfach nur cool sein.
a²+b²=mc²
Benutzeravatar
Artus
Beiträge: 280
Registriert: 15.01.2005 20:53

Beitrag von Artus »

Lol, entschuldigung, es gibt leute die habe nich soviel zeit sich jede zeile 10x anzusehen, außerdem hab ichs ja nur gut gemeint. Weist du wass ihr könnt diesen Topic löschen. Anscheinend will man meine hilfe nicht, bzw hat sie nich nötig.

LOL das mir langsam zu blöd ich post gar nix mehr!
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

na, dann brauch ich dir ja auch nicht mehr sagen,
dass so etwas schon eine Beschreibung/Kurzanleitung haben sollte,
damit ein interessierter wenigstens weiß, was diese prozeduren tun.

...bloss weil man berechtigte kritik anbringt, brauchst du nicht die beleidigte leberwurst zu spielen!

das topic wird nicht gelöscht.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Beleidigte Leberwurscht?
Dafür ist hier der falsche Platz, angebrachte Kritik solltest Du dankend ent-
gegen nehmen, weil auch Du dadurch lernst.

Die Idee mit den HTML-Tags finde ich sehr gut, ansonsten ist es in dieser
Form nicht verwendbar, leider
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Hyper
Beiträge: 194
Registriert: 19.04.2005 19:14

Beitrag von Hyper »

Hi Artus,

gute Idee, kannst Du ein Beispiel geben, wie man Deine Prozeduren im Programm implementiert?
PB 5.72
Benutzeravatar
Artus
Beiträge: 280
Registriert: 15.01.2005 20:53

Beitrag von Artus »

Lol, jo aber(Zitat):
>>>Dann 'schmier' bitte demnächst nicht in das Forum 'Code, Tipps und Tricks' <<<

ist das kritik? zu meinem Code????
ich weis nich, aber für mich hat es nicht den anschein, oder?

hier werd ich doch ganz klar aufgefordert keine sachen mehr zu posten?
ich mein es fünktioniert und dann lese ich mir das nich mehr 10 mal durch.
Außerdem hab ich doch die kritik angenommen oder irre ich mich da? (Zitat):
>>>>schnelle hab ich gar nich so darauf geachte. Hast recht <<<<
mhh? wass soll das leute?

Edit: Klar kann ich noch ein Beispiel machen, setz mich gleich ran.
Zuletzt geändert von Artus am 09.04.2007 20:47, insgesamt 1-mal geändert.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Tipp: Warum flusht du jedes Mal den FileBuffer? Stell einfach FileBuffersSize() auf 0, um das cachen der Dateien zu unterbinden - alle Schreibvorgänge erfolgen direkt auf die Disk.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Antworten