Logger schreiben

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von siycah.

    Logger schreiben

    Hallo liebes Forum!
    Ich schreibe ebend ein Logger in VB.Net der wie folgt aussieht
    (Code zur Veranschaulichung, besseres Verständnis)

    Quellcode

    1. ​Imports System.IO
    2. Imports System.Text
    3. Public Class Logger
    4. Private Shared lgr As Logger
    5. Private Shared logSettings As LoggerSettings
    6. Private Shared logFilePath As String
    7. Private Shared logFileLevel As LogLevel
    8. Private Shared locker As New Object()
    9. Public Shared Function getLogger(ByVal logFilePath As String, ByVal logFileLevel As LogLevel) As Logger
    10. If lgr Is Nothing Then
    11. SyncLock locker
    12. If lgr Is Nothing Then
    13. logSettings = New LoggerSettings(logFileLevel, logFilePath)
    14. lgr = New Logger()
    15. End If
    16. End SyncLock
    17. End If
    18. Return lgr
    19. End Function
    20. Public Sub debug(ByVal message As String)
    21. If logSettings.LogFileLevel <= LogLevel.LDEBUG Then
    22. log(LogLevel.LDEBUG, message)
    23. End If
    24. End Sub
    25. Public Sub info(ByVal message As String)
    26. If logSettings.LogFileLevel <= LogLevel.LINFO Then
    27. log(LogLevel.LINFO, message)
    28. End If
    29. End Sub
    30. Public Sub warning(ByVal message As String)
    31. If logSettings.LogFileLevel <= LogLevel.LWARNING Then
    32. log(LogLevel.LWARNING, message)
    33. End If
    34. End Sub
    35. Public Sub err(ByVal message As String)
    36. If logSettings.LogFileLevel <= LogLevel.LError Then
    37. log(LogLevel.LError, message)
    38. End If
    39. End Sub
    40. Public Sub fatal(ByVal message As String)
    41. If logSettings.LogFileLevel <= LogLevel.LFATAL Then
    42. log(LogLevel.LFATAL, message)
    43. End If
    44. End Sub
    45. Private Sub log(ByVal logLevel As LogLevel, ByVal message As String)
    46. Dim logFileDirectory As String = Path.GetDirectoryName(logSettings.LogFilePath)
    47. If Not Directory.Exists(logFileDirectory) Then
    48. Directory.CreateDirectory(logFileDirectory)
    49. End If
    50. Dim logText As String = String.Format("[{0}] [{1}] {2}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), logLevel.ToString(), message)
    51. Using sw As New StreamWriter(logSettings.LogFilePath, True)
    52. sw.WriteLine(logText)
    53. End Using
    54. End Sub
    55. End Class
    56. Public Class LoggerSettings
    57. Public Property LogFileLevel As LogLevel
    58. Public Property LogFilePath As String
    59. Public Sub New(ByVal logFileLevel As LogLevel, ByVal logFilePath As String)
    60. Me.LogFileLevel = logFileLevel
    61. Me.LogFilePath = logFilePath
    62. End Sub
    63. End Class
    64. Private Function GetFormattedLogMsg(ByVal logLevel As String, ByVal msg As String) As String
    65. Dim time As DateTime = DateTime.Now
    66. Return "[" & time.ToString("yyyy.MM.dd-HH:mm:ss") & "] [" & logLevel & "] <" & logLevel & ">: " & msg
    67. End Function
    68. Public Enum LogLevel
    69. LDEBUG
    70. LINFO
    71. LWARNING
    72. LError
    73. LFATAL
    74. End Enum


    Bei "Private Function GetFormattedLogMsg" muss ich noch nach dem Return den Aufbau verändern.
    Aber warum ich jetzt nach Lösung frage ist folgende Zeile:

    Quellcode

    1. ​Private Function GetFormattedLogMsg(ByVal logLevel As String, ByVal msg As String) As String


    Denn dort wird als Fehler angegeben das die Anweisung in einem Namespace ungültig ist.
    Ich glaube ich übersehe etwas in dem Code.
    Bitte um Hilfe.
    Danke! 8o
    Moin, dein Thema ist zwar als erledigt markiert, aber dennoch wollte ich gerne einmal fragen, weshalb du einen eigenen Logger schreibst, und nicht einen der zahlreichen Logger verwendest, die es bereits gibt?
    Ich habe in der Vergangenheit nur positive Erfahrungen mit Serilog und Log4Net gemacht.

    Gibt's da bestimmte Voraussetzungen bei dir?
    Quellcode lizensiert unter CC by SA 2.0 (Creative Commons Share-Alike)

    Meine Firma: Procyon Systems
    Meine Privatwebseite: SimonC.eu

    Bitte nicht wundern, wenn meine Aktivitäten im Forum etwas langsamer sind, ich baue gerade mein Nebengewerbe zum Vollgewerbe aus.
    Ich versuche auf euch zurückzukommen :)

    JoJo129 schrieb:

    Und die finden die fertigen logger nicht so gut.


    Verrückt. Da würden mich ja die Hintergründe interessieren. Da steckt ein Haufen Arbeit drin, in den existierenden Loggern. Ich habe es in der Vergangenheit auch schon gemacht, meine eigenen Logger zu schreiben, aber das war bei mir damals einfach, weil ich nicht verstand, wie die anderen Logger funktionieren.

    Na gut, aber dann man ran an die Arbeit ;)
    Quellcode lizensiert unter CC by SA 2.0 (Creative Commons Share-Alike)

    Meine Firma: Procyon Systems
    Meine Privatwebseite: SimonC.eu

    Bitte nicht wundern, wenn meine Aktivitäten im Forum etwas langsamer sind, ich baue gerade mein Nebengewerbe zum Vollgewerbe aus.
    Ich versuche auf euch zurückzukommen :)