Есть ли способ программно установить имя приложения в Elmah?

Мне нужно изменить имя приложения в зависимости от того, какую конфигурацию я использую в Visual Studio. Например, если я нахожусь в конфигурации отладки, я хочу, чтобы имя приложения отображалось как «App_Debug» в поле «Приложение» в таблице Elmah_Error. У кого-нибудь есть опыт в этом? Или есть другой способ сделать это?


person Mark Struzinski    schedule 30.09.2008    source источник


Ответы (2)


По умолчанию 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, у которого есть вызываемая структура за пределами веб-приложений. Оглядываясь назад, я хотел бы вместо этого использовать подход app/web.config.

Одна вещь, о которой следует помнить при изменении имени приложения в Elmah. Обработчик http, создающий интерфейс /elmah/default.aspx, больше не будет работать. Я все еще пытаюсь найти время, чтобы вернуться к этому; однако при реализации вам может потребоваться изучить создание пользовательского интерфейса.

person JamesEggers    schedule 25.11.2008
comment
Довольно небольшое замечание, но мне больше нравится этот шаблон: return _applicationName ?? (_applicationName = HttpRuntime.AppDomainAppId); - person Joel Mueller; 24.04.2009
comment
В хранимых процедурах в базе данных Elmah есть фильтры по имени приложения. Я изменил все хранимые процедуры в своей среде, чтобы игнорировать этот фильтр, чтобы я мог просматривать все ошибки в одной консоли. - person Ben Liyanage; 16.08.2012

Теперь это можно сделать чисто в разметке. Просто добавьте атрибут applicationName к элементу errorLog в разделе <elmah> файла web.config. Пример:

<errorLog type="Elmah.SqlErrorLog, Elmah" 
    connectionStringName="connectionString" applicationName="myApp"  />

Я протестировал это, и оно работает как при регистрации исключения, так и при просмотре журнала через Elmah.axd.

В случае с OP можно было бы предположить, что его можно установить и программно, но я этого не проверял. Для меня и я предполагаю, что для большинства сценариев достаточно подхода разметки.

person Stephen Kennedy    schedule 17.02.2012
comment
Где именно вы помещаете эту строку кода? Я не могу заставить его работать. :( - person Chiramisu; 01.04.2013
comment
В разделе ‹elmah› файла web.config. - person Stephen Kennedy; 01.04.2013
comment
Спасибо. Я только что узнал, что сначала нужно определить его в <configSections>. - person Chiramisu; 02.04.2013
comment
Возможно, целесообразно использовать это в сочетании с преобразованием Web.Config, если для сборки DEBUG требуются другие параметры. stackoverflow.com/a/35561167/397817 msdn.microsoft.com/en-us/library/dd465326(VS.100).aspx - person Stephen Kennedy; 27.03.2018