Есть ли какой-нибудь способ программно задать имя приложения в Elmah?
Вопрос
Мне нужно изменить название приложения в зависимости от того, какую конфигурацию я использую в Visual Studio.Например, если я нахожусь в конфигурации отладки, я хочу, чтобы имя приложения отображалось как 'App_Debug' в поле Приложения в таблице Elmah_Error.Есть ли у кого-нибудь какой-нибудь опыт в этом?Или есть другой способ сделать это?
Решение
По умолчанию Elmah использует GUID приложения AppPool в качестве имени приложения по умолчанию.Он использует это как ключ для идентификации ошибок в таблице Elmah_Error, когда вы просматриваете веб-интерфейс, созданный с помощью его HTTP-модуля.
В начале этого года мне было поручено изучить этот вариант для моей компании.Я не смог найти способ манипулировать этим по умолчанию, поскольку Elmah извлекает имя приложения из HttpRuntime.AppDomainAppId
в файле ErrorLog.cs.Вы можете манипулировать им с помощью любого ключа, который захотите;однако это GUID AppPool.
С учетом сказанного, я смог манипулировать файлом ErrorLog.cs, чтобы превратить Elmah в вызываемый фреймворк вместо фреймворка на основе обработчика и разрешить мне устанавливать ApplicationName.В итоге я изменил ErrorLog.cs, включив в него свойство, которое позволило мне задать имя, как показано ниже:
public virtual string ApplicationName
{
get
{
if (_applicationName == null) { _applicationName = HttpRuntime.AppDomainAppId; }
return _applicationName;
}
set { _applicationName = value; }
}
Что вам, вероятно, нужно будет сделать, так это настроить это по-другому и установить для ApplicationName значение not HttpRuntime.AppDomainAppId
но, вместо этого, значение, извлеченное из web.config.В общем, это возможно.То, как я это сделал, усилило ErrorLog.Log(ex)
метод, который я мог бы использовать, Elmah имеет вызываемую структуру, выходящую за рамки веб-приложений.Оглядываясь назад, я жалею, что вместо этого не использовал подход app / web.config.
Одна вещь, которую следует иметь в виду при изменении имени приложения в Elmah.HTTP-обработчик, который генерирует интерфейс /elmah/default.aspx, больше не будет работать.Я все еще пытаюсь найти время, чтобы вернуться к таким;однако при реализации вам, возможно, потребуется изучить возможность создания пользовательского интерфейса.
Другие советы
Теперь это можно сделать исключительно с помощью разметки.Просто добавьте applicationName
атрибут для errorLog
элемент в <elmah>
раздел файла web.config.Пример:
<errorLog type="Elmah.SqlErrorLog, Elmah"
connectionStringName="connectionString" applicationName="myApp" />
Я протестировал это, и это работает как при регистрации исключения, так и при просмотре журнала через Elmah.axd
.
В случае с OP можно было бы предположить, что его тоже можно настроить программно, но я этого не тестировал.Для меня, и я полагаю, что для большинства сценариев подхода к разметке достаточно.