Я работаю над конфигурацией Log4Net, которая будет регистрировать все необработанные исключения. Мне нужно, чтобы на каждую запись журнала добавлялись определенные свойства, основанные на пользователе. Я успешно установил это в моем приложении 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
Это, кажется, работает нормально. Однако у меня есть некоторые вопросы, на которые я не могу ответить.
Является ли способ добавления пользовательских свойств через threadcontext, правильно? Будет ли это всегда регистрировать правильную информацию, даже при загрузке? Когда вы будете использовать threadlogicalcontext? Есть лучший способ сделать это?
Благодаря
Просто будьте осторожны, если вы используете параллельное кодирование, так как HttpContext.Current может потребоваться копировать на любые рабочие потоки, если они добавляются в журнал. –
Где в global.asax.cs вы бы поместили вызов HttpContextUserProvider? – Rory
ASP.Net имеет специфическое для контекста хранилище. См. Здесь: http://msdn.microsoft.com/en-us/library/system.web.httpcontext.items.aspx – MatteoSp