_logging - Logging/Debugging inkl. Loglevel (ERROR, INFO, DEBUG)

  • 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
    [autoit]

    #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

    [/autoit]


    _logging_Example.au3

    Spoiler anzeigen
    [autoit]

    #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

    [/autoit] [autoit][/autoit] [autoit]

    _logging("Scriptende von " & @ScriptName, "INFO", Default)

    [/autoit]


    Verbesserungsvorschläge sind natürlich willkommen.

  • EDIT 1:

    gelöst ^^

    EDIT 2:

    hab n bug, er logt nur ERROR )= dazu kommt das wenn man den key in der registry selber erstellt und auf INFO stellt das ERROR, DEBUG und INFO nicht im gleichen file gespeichert werden.

    Einmal editiert, zuletzt von K1773R (6. März 2009 um 00:52)

  • ist schon klar aber was bringt dir RegRead wenn man da erst selber was reinschreiben muss?

  • ich weiss ^^
    wie wärs ein eintrag in der registry zu machen wenn loglevel mitgegeben wird? aber dann ned einfach loglevel sondern

    [autoit]

    "loglevel_" & @scriptname

    [/autoit]

    oder so ^^