Existe alguma maneira para programaticamente definir o nome do aplicativo em Elmah?
Pergunta
Eu preciso alterar o nome do aplicativo com base no que configuração que estou usando no Visual Studio. Por exemplo, se eu estou na configuração de depuração, eu quero o nome do aplicativo para mostrar como 'App_Debug' no campo de aplicação na tabela de Elmah_Error. Alguém tem alguma experiência com isto? Ou existe outra maneira de fazê-lo?
Solução
Por padrão, Elmah usa GUID aplicação do AppPool como o nome do aplicativo padrão. Ele usa isso como a chave para identificar os erros na tabela de Elmah_Error quando você olha para a interface web que é criado através da sua HTTP Module.
Eu estava encarregado de explorar esta opção para a minha empresa no início deste ano. Eu não poderia encontrar uma maneira de manipular isso por padrão desde Elmah puxa o nome do aplicativo HttpRuntime.AppDomainAppId
no arquivo ErrorLog.cs. Você pode manipulá-lo por qualquer chave que você deseja; no entanto, que é o GUID do AppPool.
Com isso dito, eu era capaz de manipular o arquivo ErrorLog.cs para transformar Elmah em uma estrutura que pode ser chamado em vez de um manipulador de base um e permitir-me definir o ApplicationName. O que eu acabei fazendo foi modificando ErrorLog.cs para incluir uma propriedade que me permitiu definir o nome como abaixo:
public virtual string ApplicationName
{
get
{
if (_applicationName == null) { _applicationName = HttpRuntime.AppDomainAppId; }
return _applicationName;
}
set { _applicationName = value; }
}
O que você provavelmente terá que fazer é ajustar isso de forma diferente e definir o ApplicationName não HttpRuntime.AppDomainAppId
mas, em vez disso, um valor retirado do web.config. Tudo somado, é possível. A maneira que eu fiz isso reforçado o método ErrorLog.Log(ex)
para que eu pudesse usar Elmah tem um quadro que pode ser chamado além das aplicações web. Olhando para trás, eu queria ter feito a abordagem app / web.config vez.
Uma coisa para manter em mente quando se muda o nome do aplicativo em Elmah. O http manipulador que gera a interface /elmah/default.aspx não funcionará mais. Eu ainda estou tentando encontrar tempo para círculo de volta ao redor para tal; no entanto, você pode precisar de olhar para a criação de uma interface personalizada na implementação.
Outras dicas
Isso pode agora ser feito exclusivamente na marcação. Basta adicionar um atributo applicationName
ao elemento errorLog
na seção <elmah>
do arquivo web.config. Exemplo:
<errorLog type="Elmah.SqlErrorLog, Elmah"
connectionStringName="connectionString" applicationName="myApp" />
Eu testei isso e ele funciona tanto quando registrando uma exceção e ao visualizar o log via Elmah.axd
.
No caso do OP, seria de imaginar que pode ser definido através de programação também, mas eu não testei isso. Para mim e eu imagino que para a maioria dos cenários a abordagem de marcação é suficiente.