Log4Net, ThreadContext und Global.asax

Arbeite ich an einem Log4Net Konfiguration, die melden sich alle nicht behandelten Ausnahmen. Ich brauche bestimmte Eigenschaften, basierend auf Benutzer, um Hinzugefügt werden zu jedem log-Eintrag. Ich habe setzen Sie diese erfolgreich in der folgenden Art und Weise in meinem Application_Error event. Hier ist meine komplette global.asax

Imports log4net
Imports log4net.Config

    Public Class Global_asax
        Inherits System.Web.HttpApplication

        'Define a static logger variable
        Private Shared log As ILog = LogManager.GetLogger(GetType(Global_asax))

        Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
            ' Fires when the application is started
            ConfigureLogging()
        End Sub

        Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
            ' Code that runs when an unhandled error occurs
            Dim ex As Exception = Server.GetLastError()
            ThreadContext.Properties("user") = User.Identity.Name
            ThreadContext.Properties("appbrowser") = String.Concat(Request.Browser.Browser, " ", Request.Browser.Version)
            If TypeOf ex Is HttpUnhandledException AndAlso ex.InnerException IsNot Nothing Then
                ex = ex.InnerException
            End If
            log.Error(ex)
            ThreadContext.Properties.Clear()
        End Sub

        Private Sub ConfigureLogging()
            Dim logFile As String = Server.MapPath("~/Log4Net.config")
            log4net.Config.XmlConfigurator.ConfigureAndWatch(New System.IO.FileInfo(logFile))
            log4net.GlobalContext.Properties("appname") = System.Reflection.Assembly.GetExecutingAssembly.GetName.Name
        End Sub
    End Class

Dieser scheint einwandfrei zu funktionieren. Jedoch habe ich einige Fragen, die ich nicht in der Lage bin zu beantworten.

Ist die Art und Weise, dass ich bin das hinzufügen der Benutzer-spezifischen Eigenschaften, über die threadcontext, richtig? Wird dies immer log die richtigen Informationen auch unter Last? Wann würden Sie verwenden threadlogicalcontext? Gibt es einen besseren Weg, dies zu tun?

Dank

InformationsquelleAutor tribus | 2009-06-30
Schreibe einen Kommentar