Voila une classe très simple mais très pratique ! Vous l'ajoutez a votre site Internet (ou dans votre framework si vous en avez un) et vous "loguez" les fonctions importantes de votre site comme les inscriptions à la newsletter, les commandes, les messages des internautes, mais aussi et surtout les arrêts de l'application, les erreurs du site, ...
dans les annotations, vous avez un exemple pour loguer les erreurs et les traces de votre site.
CREATE TABLE [dbo].[AA_Events] (
[EVT_ID] [int] IDENTITY (1, 1) NOT NULL ,
[EVT_TITLE] [text] COLLATE French_CI_AS NOT NULL ,
[EVT_DATE] [datetime] NOT NULL ,
[EVT_PRIO] [int] NOT NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
Source / Exemple :
Imports System.Data.SqlClient
Imports System.Configuration
Namespace IO
Public Class Logs
Public Shared Sub AddEvent(ByVal titleEvent As String, Optional ByVal Priorite As Integer = 3)
Dim conn As New SqlConnection(ConfigurationSettings.AppSettings("ConnectionString"))
Dim com As New SqlCommand("INSERT INTO AA_Events (EVT_TITLE,EVT_PRIO) VALUES ('" & Replace(titleEvent, "'", "''") & "'," & Priorite & ")", conn)
Try
conn.Open()
com.ExecuteNonQuery()
Catch ex As Exception
Finally
com = Nothing
conn.Close()
conn = Nothing
End Try
End Sub
Public Shared Function GetEventsDay() As DataTable
Dim conn As New SqlConnection(ConfigurationSettings.AppSettings("ConnectionString"))
Dim DataAdap As SqlDataAdapter
Dim latable As New DataTable
Try
conn.Open()
DataAdap = New SqlDataAdapter("SELECT * FROM AA_Events WHERE dbo.trunc(EVT_DATE)=dbo.trunc(getdate()) ORDER BY EVT_DATE DESC", conn)
DataAdap.Fill(latable)
Catch ex As Exception
Finally
DataAdap.Dispose()
DataAdap = Nothing
conn.Close()
conn = Nothing
End Try
Return latable
End Function
Public Shared Function GetEvents() As DataTable
Dim conn As New SqlConnection(ConfigurationSettings.AppSettings("ConnectionString"))
Dim DataAdap As SqlDataAdapter
Dim latable As New DataTable
Try
conn.Open()
DataAdap = New SqlDataAdapter("SELECT * FROM AA_Events ORDER BY EVT_DATE DESC", conn)
DataAdap.Fill(latable)
Catch ex As Exception
Finally
DataAdap.Dispose()
DataAdap = Nothing
conn.Close()
conn = Nothing
End Try
Return latable
End Function
Public Shared Sub DelAllEvents()
Dim conn As New SqlConnection(ConfigurationSettings.AppSettings("ConnectionString"))
Dim com As New SqlCommand("DELETE FROM AA_Events", conn)
Try
conn.Open()
com.ExecuteNonQuery()
Catch ex As Exception
Finally
com = Nothing
conn.Close()
conn = Nothing
End Try
End Sub
Public Shared Sub DelEventsPRIO(ByVal Priorite As Integer)
Dim conn As New SqlConnection(ConfigurationSettings.AppSettings("ConnectionString"))
Dim com As New SqlCommand("DELETE FROM AA_Events WHERE EVT_PRIO=" & Priorite.ToString, conn)
Try
conn.Open()
com.ExecuteNonQuery()
Catch ex As Exception
Finally
com = Nothing
conn.Close()
conn = Nothing
End Try
End Sub
Public Shared Function GetEventsByPrio(ByVal Priorite As Integer) As DataTable
Dim conn As New SqlConnection(ConfigurationSettings.AppSettings("ConnectionString"))
Dim DataAdap As SqlDataAdapter
Dim latable As New DataTable
Try
conn.Open()
DataAdap = New SqlDataAdapter("SELECT * FROM AA_Events WHERE EVT_PRIO=" & Priorite.ToString & " ORDER BY EVT_DATE DESC", conn)
DataAdap.Fill(latable)
Catch ex As Exception
Finally
DataAdap.Dispose()
DataAdap = Nothing
conn.Close()
conn = Nothing
End Try
Return latable
End Function
End Class
End Namespace
Conclusion :
Par exemple, dans le global.asax.vb, ajoutez dans :
<b>Application_Start :</b>
IO.Logs.AddEvent("Arrêt de l'application", 2)
<b>Application_Error :</b>
Dim sBody As String = "Erreur : " + Server.GetLastError().InnerException.Message + vbCrLf + "Page : " + Request.ServerVariables("SCRIPT_NAME") + vbCrLf + "QUERY_STRING : " + Request.ServerVariables("QUERY_STRING") + vbCrLf + "Référent : " + Request.ServerVariables("HTTP_REFERER") + vbCrLf + "Navigateur : " + Request.UserAgent.ToString + vbCrLf + "Paramètre : " + Request.ServerVariables("HTTP_URL") + vbCrLf + vbCrLf + "Stack : " + Environment.StackTrace
IO.Logs.AddEvent(Replace(sBody, vbCrLf, "<br>"), 1)
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.