Мне нужно изменить имя приложения на основе той конфигурации, которую я использую в Visual Studio. Например, если я настроен в конфигурации Debug, я хочу, чтобы имя приложения отображалось как "App_Debug" в поле "Приложение" в таблице Elmah_Error. У кого-нибудь есть опыт? Или есть другой способ сделать это?
Есть ли способ программно установить имя приложения в Elmah?
Ответ 1
По умолчанию 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 не на HttpRuntime.AppDomainAppId
, а вместо этого вывести значение из web.config. В общем, это возможно. То, как я это сделал, улучшил метод ErrorLog.Log(ex)
, чтобы я мог использовать Elmah, который может быть выведен из строя вне веб-приложений. Оглядываясь назад, я бы хотел, чтобы я использовал приложение /web.config.
Одна вещь, которую следует иметь в виду при изменении имени приложения в Elmah. Обработчик http, который генерирует интерфейс /elmah/default.aspx, больше не будет работать. Я все еще пытаюсь найти время, чтобы вернуться обратно к такому; тем не менее, вам может потребоваться изучить создание пользовательского интерфейса при его реализации.
Ответ 2
Теперь это можно сделать только в разметке. Просто добавьте атрибут applicationName
в элемент errorLog
в разделе <elmah>
файла web.config. Пример:
<errorLog type="Elmah.SqlErrorLog, Elmah"
connectionStringName="connectionString" applicationName="myApp" />
Я протестировал это, и он работает как при регистрации исключения, так и при просмотре журнала через Elmah.axd
.
В случае OP, можно предположить, что он может быть установлен программно, но я не тестировал это. Для меня и я предполагаю, что для большинства сценариев подход разметки достаточен.