Seite 1 von 2

LogFile System

Verfasst: 09.04.2007 18:23
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

Re: LogFile System

Verfasst: 09.04.2007 20:05
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

Verfasst: 09.04.2007 20:16
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

Verfasst: 09.04.2007 20:20
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.

Verfasst: 09.04.2007 20:26
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!

Verfasst: 09.04.2007 20:36
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.

Verfasst: 09.04.2007 20:40
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

Verfasst: 09.04.2007 20:41
von Hyper
Hi Artus,

gute Idee, kannst Du ein Beispiel geben, wie man Deine Prozeduren im Programm implementiert?

Verfasst: 09.04.2007 20:44
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.

Verfasst: 09.04.2007 20:46
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.