Existe alguma maneira para programaticamente definir o nome do aplicativo em Elmah?

StackOverflow https://stackoverflow.com/questions/153054

  •  03-07-2019
  •  | 
  •  

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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top