Я использую log4net для регистрации сообщений журнала нашего веб-сайта ASP.NET, и в последнее время я хотел добавить информацию о странице / обработчике, где произошла ошибка. Поэтому я решил добавить следующую строку в Global.asax:
void Application_BeginRequest(object sender, EventArgs e)
{
log4net.ThreadContext.Properties["page"] = HttpContext.Current.Request.AppRelativeCurrentExecutionFilePath;
}
и, соответственно, я добавил %property{page}
в свой шаблон преобразования:
<conversionPattern value="%newline%date %-5level %property{page} - %message%newline%newline%newline" />
Это работало нормально для единичных запросов. Но затем я заметил в своих журналах, что свойство страницы может измениться во время запроса ASP.NET. У меня есть вход в один обработчик ASHX, и в процессе его обработки свойство страницы будет меняться на другое значение, которое указывает на страницу ASPX. Я пришел к выводу, что в ASP.NET поступает еще один запрос, и выполняется BeginRequest
, а свойство статической страницы в log4net.ThreadContext
изменяется на другое значение.
Теперь я хотел бы сохранить свойство страницы для каждого запроса, чтобы можно было последовательно указывать путь к исполняемой странице в журнале. Я пытался найти ответ, но ничего не вышло. Каков рекомендуемый способ решения этой проблемы? Я уверен, что это очень базовая функциональность регистрации событий веб-сервера.