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

Beitrag von Artus »

@AND51: Is das nich langsamer wenn ich das immer auf die disk schreibe als wenn ich das einmal flushe?, aber wenn das genau so schnell is mach ich das so^^
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 »

> ich mein es fünktioniert und dann lese ich mir das nich mehr 10 mal durch
Programmieren ist keine Art Try & Error Baukasten :wink:
Wenn der Code funktioniert, heisst das noch lange nicht, das er sicher,
überall usw. Programmierer haben u.a. auch eine Sorgfaltspflicht, weil bei
solchen gravierenden Fehlern, wie fehlende Überprüfung der Erstellung eines
Files, schützen auch die meisten Lizensklauseln nicht.

Z.B. Win9x kann durch so etwas abstürzen, wodurch Datenverluste nicht
mehr ausgeschlossen sind.

Wenn Deine Codes immer so schlusig sind, bzw. du solche erheblichen
Mängel nicht behebst, brauchste wirklich nicht in diesem Unterforum posten,
nur meine persönliche Meinung dazu.
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
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> Is das nich langsamer wenn ich das immer auf die disk schreibe als wenn ich das einmal flushe?

flushen stellt nur sicher, dass der schreibvorgang genau zu dem zeitpunkt auch abgeschlossen wird.
ist ja für diese anwendung nicht unbedingt verkehrt, weil es ja in dem file sein soll, falls das prog abstürzt.

ich bin mir nicht sicher, ob das OS das auch ohne flushing im Falle eines
Absturzes sicherstellt, deswegen hast du's ja wahrscheinlich eingebaut.

wenn du das nach jedem datensatz machst, kannst du gleich ohne buffer arbeiten,
das sollte dann geschwindigkeitstechnisch keinen unterschied mehr machen.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Artus
Beiträge: 280
Registriert: 15.01.2005 20:53

Beitrag von Artus »

Mhh naja die Sache is die, ich gebe den HTML-Code mit mehreren Writestring aus, weil ich nich alles in eins schreiben will, wegen Übersicht.
Und is es dann nich egal ob er blos den halben HTML-Code einer Ausgabe(die mehrere Zeilen lang sein kann) ausgibt oder denn gesamten Befehl auf einmahl?
Ok, habs aber jetzt aber mal so gemacht wie dus vorgeschlagen hast.

also hier der neue Code:

Code: Alles auswählen

;//###################################################//;
;//# Logfile.pbi                                     #//;
;//###################################################//;

#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.b 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.b Log_Create(LogName.s)
  If CreateFile(#Log_File,LogName+".html")
    FileBuffersSize(#Log_File,0)
    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>")
    ProcedureReturn #True
  EndIf
  ProcedureReturn #False
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>")
EndProcedure


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

Procedure Log_TextOutN(Text.s)
  WriteStringN(#Log_File,Text+"<br>")
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
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
  ProcedureReturn Result
EndProcedure

Reicht ein Beispiel oder solls ne genaue anleitung sein?
also hier mal ein kleines Beispiel:

Code: Alles auswählen

XIncludeFile "Logfile.pb"
Log_Create("TestLog") ;// Erstellt die Log.HTML


Global A.b = 10
Global B.b = 5
Global C.b = 0

Procedure.b Proc(Result.b)
  ProcedureReturn Result
EndProcedure 

Log_WriteTopic("A + B", 5) ;// Erstellt eine Überschrift, 5 = Größe

Log_TextOut("A = "+Str(A))     ;// Schreibt einen String
Log_TextOutN("\ B = "+Str(B))     ;// Schreibt einen String mit einem End Of Line(HTML)
Log_TextOutN("") 

Log_TextOut_C(#Log_Blue, #False, "Blau")  ;// Erstellt einen farbigen String
Log_TextOut_C(#Log_Green, #True, "Aufzählung")  ;// Erstellt einen farbigen String, mit einem Aufzählungszeichen
Log_TextOut_C(#Log_Green, #True, "Aufzählung")  ;// Erstellt einen farbigen String, mit einem Aufzählungszeichen


Log_ProcResult("Proc(#True):",Proc(#True))    ;// 
Log_ProcResult("Proc(#False):",Proc(#False))  ;// Zeigt ob die Prcedure funktioniert hat
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

Ganz süß, für nen Anfänger. Ich schätze mal mehr lässt sich dabei
leider nicht aus PB raus holen, schade.
Bild
Benutzeravatar
Artus
Beiträge: 280
Registriert: 15.01.2005 20:53

Beitrag von Artus »

^^ wer sagt ich binn Anfänger?!
Mhh aber mehr brauch man eigentlich nich die Funktionen reichen voll und ganz. Ich mein mann kann mit PB, alles machen wenn man HTML kann^^
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

Ich meinte das wäre für nen Anfänger ganz süß gewesen. Noch mehr
interessant wäre z.B. gewesen in welchem Modul denn diese Log aus-
gegeben wurde. gibt aber sich noch mehr Dinge, die man noch mit
rein bauen könnte.
Bild
Antworten