Hallo zusammen,
ich hab eine Funktion geschrieben, mit der das Logging innerhalb eines Scripts besser gesteuert werden kann.
Durch die Unterscheidung von Loggingstufen ist es möglich die Logausgaben gezielt zu filtern.
ERROR-Logausgaben sind für Fehlerfälle vorgesehen und werden immer geloggt.
INFO-Logausgaben sind für informierende Ausgaben vorgesehen und werden bei den Logstufen DEBUG und INFO geloggt.
DEBUG-Logausgaben sind für fast jeden wichtigen Funktionsaufruf vorgesehen und werden nur bei der Logstufe DEBUG geloggt.
Die Loggingstufe wird in der Registry gespeichert.
_logging.au3
Spoiler anzeigen
#include <File.au3>
[/autoit] [autoit][/autoit] [autoit];-----------------------------------------------------------------------------------------------------------------
; Function _logging($s_text, [$s_stufe = "ERROR"[, $s_logfile = ""]])
;
; Description Schreibt den übergebenen Text in eine Logdatei. Ist ein Logginglevel im System
; gesetzt, wird der Text nur geloggt, wenn es dem Logginglevel entspricht.
; - Text als ERROR eingestuft: wird geloggt, wenn Logginglevel DEBUG, INFO oder ERROR ist (immer)
; - Text als INFO eingestuft: wird geloggt, wenn Logginglevel DEBUG oder INFO ist
; - Text als DEBUG eingestuft: wird geloggt, wenn Logginglevel DEBUG ist
;
; Logginglevel ist in Registry-Wert gespeichert. (siehe Script $reg_pfad + $reg_key)
;
;
; Parameter notwendig $s_text: Logging Text
; optional $s_stufe: Logging Stufe (ERROR, INFO oder DEBUG) (Default: ERROR)
; optional $s_logfile: a) Logdatei inkl. Pfad (angegebene Datei als Zieldatei
; b) Default (Default-Logdatei als Zieldatei)
; c) leer (Default-Pfad + Scriptname als Logdateiname)
;
;
; Return Erfolg 1
; Fehler 0
; @Error: 0 = No error.
; 1 = Logdatei konnte nicht geöffnet werden
; 2 = Logdatei konnte nicht beschrieben werden
;
;
; Version 0.1
;
; Author zemkedesign (http://www.autoit.de/index.php?page=User&userID=200384)
;-----------------------------------------------------------------------------------------------------------------
Func _logging($s_text, $s_stufe = "ERROR", $s_logfile = "")
Local Const $reg_pfad = "HKEY_LOCAL_MACHINE\SOFTWARE\AutoIt v3"
Local Const $reg_key = "loglevel"
Local Const $logfile_pfad = "C:\tmp\" ;Pfad endet mit \
Local Const $logfile_default = $logfile_pfad & "default.log"
Local $logfile, $computername, $stufe, $logstufe, $result, $a, $b
$s_stufe = StringUpper($s_stufe)
;kein Loglevel gesetzt, dann nur ERROR loggen
;falls Loglevel gesetzt, dann alles über dem LEVEL loggen
$result = RegRead($reg_pfad, $reg_key)
;Pfad existiert nicht
If @error Then RegWrite($reg_pfad, $reg_key, "REG_SZ", "")
Switch StringUpper($result)
Case "ERROR", ""
If $s_stufe = "INFO" Or $s_stufe = "DEBUG" Then Return
Case "INFO"
If $s_stufe = "DEBUG" Then Return
EndSwitch
;Logfile setzen
If $s_logfile = Default Then
$logfile = $logfile_default
ElseIf $s_logfile = "" Then
;Datei-Endung ersetzen
_PathSplit(@ScriptName, $a, $a, $b, $a)
$logfile = $logfile_pfad & $b & ".log"
Else
$logfile = $s_logfile
EndIf
;Logging
Return _FileWriteLog($logfile, "[" & StringUpper(@ComputerName) & "/" & @IPAddress1 & "] [" & $s_stufe & "] :: " & $s_text)
EndFunc ;==>logLevel
_logging_Example.au3
Spoiler anzeigen
#include "_logging.au3"
[/autoit] [autoit][/autoit] [autoit]_logging("Scriptstart von " & @ScriptName, "INFO", Default)
[/autoit] [autoit][/autoit] [autoit]_logging("MsgBox aufgerufen", "DEBUG")
If MsgBox(1, "", "Abbrechen stellt Fehlerfall dar") = 2 Then
_logging("MsgBox fälschlicherweise abgebrochen", "ERROR")
Else
_logging("MsgBox korrekt geschlossen", "DEBUG")
EndIf
_logging("Scriptende von " & @ScriptName, "INFO", Default)
[/autoit]
Verbesserungsvorschläge sind natürlich willkommen.