.net - classe de log d'evènement

Contenu du snippet

Dans le cadre de développement, il est toujours utile de pouvoir 'logger' les évènements qui surviennent (particulièrement en cas d'erreur). Cela peut se faire via un fichier Texte, mais aussi en écrivant directement dans l'event viewer.
Cette petite classe est un exemple simple et rapide pour réaliser cela.

Source / Exemple :


' Voila la Classe ( LogGenerator.vb )

'**********************************************************************************
' $Archive: $ 
' $Author:  $ 
' $Date:  $  $Revision: $
'  Description : Classe de Gestion des Logs lors de l'exécution des Fonctions
' *********************************************************************************

Imports System.IO

Public Class LogGenerator
    Private _NomFichier As String
    Private _NomApplication As String
    Private Const DEFAULT_NOM_APPLICATION As String = "TextLogGenerator"

#Region "Liste des Propriétés Publiques"

    ' -----------------------------------------------------
    Property NomFichier() As String
        Get
            NomFichier = RenvoieCheminFichier()
        End Get
        Set(ByVal Value As String)
            _NomFichier = Value
        End Set
    End Property

    ' -----------------------------------------------------
    Property NomApplication() As String
        Get
            NomApplication = _NomApplication
        End Get
        Set(ByVal Value As String)
            _NomApplication = Value
        End Set
    End Property

    ' -----------------------------------------------------
#End Region

    ' -----------------------------------------------------
    Public Sub New()
        ' Constructeur par défaut de la Classe
        _NomFichier = "Logging.txt"
        _NomApplication = "Logger"
    End Sub

    ' -----------------------------------------------------
    Public Sub New(ByVal NomApplicationDonne As String, ByVal NomFichierLogDonne As String)
        ' Constructeur par défaut de la Classe
        _NomFichier = Trim(NomFichierLogDonne)
        _NomApplication = Trim(NomApplicationDonne)
    End Sub

    ' -----------------------------------------------------
    Private Function RenvoieCheminFichier() As String
        ' Renvoie en résultat le chemin complet du fichier
        Dim TempDefault As String
        Dim TempNomFichier As String
        Dim TempPath As String
        Dim TempDirectory As String

        TempPath = Environment.CurrentDirectory
        If Right(TempPath, 1) <> "\" Then
            TempPath = TempPath & "\"
        End If
        TempDefault = TempPath & "Log.txt"

        If _NomFichier = "" Then
            Return TempDefault
            Exit Function
        End If

        If Not File.Exists(_NomFichier) Then
            Try
                Dim TempInfo As New FileInfo(_NomFichier)
                TempDirectory = TempInfo.DirectoryName

                If Not Directory.Exists(TempDirectory) Then
                    TempNomFichier = TempDefault
                Else
                    TempNomFichier = _NomFichier
                End If
            Catch Ex As Exception
                TempNomFichier = TempDefault
            End Try
        Else
            TempNomFichier = _NomFichier
        End If
        Return TempNomFichier
    End Function

    ' -----------------------------------------------------
    Public Sub Log(ByVal TexteALogger As String)
        ' Enregistrement du texte fourni dans le fichier Log, s'il n'existe pas il le crée, 
        ' sinon il écrit en fin de fichier
        Dim TempNomFichier As String
        Dim objWriter As StreamWriter
        TempNomFichier = RenvoieCheminFichier()
        If Not File.Exists(TempNomFichier) Then
            objWriter = File.CreateText(TempNomFichier)
        Else
            objWriter = File.AppendText(TempNomFichier)
        End If
        Try
            objWriter.WriteLine(TexteALogger)
            objWriter.Close()
        Catch Ex As Exception
            Err.Raise(Err.Number, , Ex.Message)
        End Try
    End Sub

    ' -----------------------------------------------------
    Public Function WriteToEventLog(ByVal Entry As String, Optional ByVal EventType As EventLogEntryType = EventLogEntryType.Information) As Boolean
        ' Ajoute les message donnés directement dans l'Event Log de Windows
        Dim TempNomSource As String
        Dim objEventLog As New EventLog

        TempNomSource = IIf(Trim(_NomApplication) = "", DEFAULT_NOM_APPLICATION, _NomApplication).ToString
        Try
            'Enregistre le message transmis dans l'Event Log en créant un nouveau bloc avec le nom de l'application
            ' s'il n'existe pas encore
            If Not objEventLog.SourceExists(TempNomSource) Then
                objEventLog.CreateEventSource(TempNomSource, "Application")
            End If

            objEventLog.Source = TempNomSource
            objEventLog.WriteEntry(Entry, EventType)
            Return True
        Catch
            Return False
        End Try
    End Function

    ' -----------------------------------------------------
    Public Sub LogError(ByVal Ex As Exception, Optional ByVal NomProcedure As String = "")
        ' Log Automatiquement les erreur transmises
        Dim TempAns As String
        TempAns = "Exception " & Ex.Message & " survenue"
        If NomProcedure <> "" Then
            TempAns = TempAns & " in " & NomProcedure
        End If
        TempAns = TempAns & " [" & Now.ToLongDateString & "]"
        Log(TempAns)
    End Sub

    ' -----------------------------------------------------
    Public Sub Reset()
        ' Efface le Fichier s'il existe déja
        Dim sFileName As String
        sFileName = RenvoieCheminFichier()
        Try
            File.Delete(sFileName)
        Catch
        End Try
    End Sub

    ' -----------------------------------------------------
End Class

' -----------------------------------------------------
' Les appels se font de la manière suivante dans un cas pour le stockage en fichier texte d'une erreur survenue :

' On définit le nom du fichier et son chemin complet

Private FichierLog As String = "C:\LogAd.log"

' On ajoute le catch d'erreur 

        Try
        ...
        Catch ex As Exception
            Dim MonLog As New LogGenerator("WS_CREATION_COMPTE_AD", FichierLog)
            MonLog.Log("Erreur dans le Chargement de la liste des Comptes | Message complet : " & ex.Message.ToString & " | Date : " & Date.Now.ToString)
        Finally

Conclusion :


Bon Coding

Romelard Fabrice (Alias F___)

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.