मैं लॉग 4नेट कॉन्फ़िगरेशन पर काम कर रहा हूं जो सभी अनचाहे अपवादों को लॉग करेगा। प्रत्येक लॉग एंट्री में जोड़े जाने के लिए मुझे उपयोगकर्ता के आधार पर कुछ गुणों की आवश्यकता है। मैंने इसे अपने application_Error ईवेंट में निम्न तरीके से सफलतापूर्वक सेट अप किया है। यहां मेरा पूरा global.asaxLog4Net, ThreadContext, और 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
ऐसा लगता है कि यह ठीक काम कर रहा है। हालांकि, मेरे पास कुछ प्रश्न हैं जो मैं जवाब देने में असमर्थ हूं।
जिस तरह से मैं थ्रेडकॉन्क्स्ट के माध्यम से उपयोगकर्ता विशिष्ट गुण जोड़ रहा हूं, सही है? क्या यह हमेशा लोड के तहत भी सही जानकारी लॉग करेगा? आप थ्रेडलॉगिकल कॉन्टेक्स्ट का उपयोग कब करेंगे? क्या ऐसा करने के लिए इससे अच्छा तरीका है?
धन्यवाद
अगर आप एचटीपीकॉन्टेक्स्ट के बाद समानांतर कोडिंग का उपयोग करते हैं तो सावधान रहें। अगर वे लॉग में जोड़ते हैं तो किसी भी कार्यकर्ता धागे को वर्तमान में कॉपी करने की आवश्यकता हो सकती है। –
global.asax.cs में आप कॉल को HttpContextUserProvider पर डाल देंगे? – Rory
एएसपी.Net में एक संदर्भ विशिष्ट भंडारण है। यहां देखें: http://msdn.microsoft.com/en-us/library/system.web.httpcontext.items.aspx – MatteoSp