Я использовал 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
изменяется на другое значение.
Теперь я хотел бы сохранить свойство страницы для каждого запроса, чтобы путь исполняемой страницы постоянно регистрировался в журнале. Я пытался найти ответ, но ничего не вышло. Каков рекомендуемый способ решения этой проблемы? Я уверен, что это очень базовая функциональность регистрации событий веб-сервера.