Pergunta

Estou usando Elmah com ASP.NET e me perguntando como adicionaria dados personalizados, como uma variável de sessão, a um email de exceção não tratado.

Tentei vários manipuladores no arquivo Global.asax, mas não consigo encontrar o correto.

Foi útil?

Solução

Para isso, acho que você precisaria modificar o Elmah fonte e recompilar.Não deve ser muito difícil de conseguir.Se você der uma olhada no construtor do Elmah.Error classe, o HttpContext é transmitido, a partir do qual você poderá obter as informações necessárias, por exemplo.Sessão, variáveis ​​de formulário etc.Você pode adicionar campos personalizados ao Elmah.Error classe para esses dados

Eu acho que o Elmah.ErrorMailHtmlFormatter classe é onde o e-mail é construído usando um HtmlTextWriter, e aqui você pode inserir código no RenderSummary() método para incluir os campos personalizados que você adicionou ao Elmah.Error.

Eu sei que pode ser difícil começar a trabalhar com o código-fonte, mas pessoalmente acho que é a maneira mais limpa, já que atualmente não há facilidade para modelos de relatório/e-mail, e é melhor usar algo para alterar a saída depois de gerada.

Outras dicas

A resposta de Andrew ajudou muito, obrigado.Acabei fazendo o seguinte:

  1. Adicionado um evento OnBuilding ao módulo http ErrorMail.Os argumentos de evento para este evento possuem uma propriedade NameValueCollection.
  2. Lidei com o evento OnBuilding em global.asax.
  3. Como os HttpModules nem sempre têm acesso ao sessionstate, esp.se a exceção ocorrer antes do carregamento da sessão, copiei os dados que queria relatar no cache HttpApplication (indexado por sessionid).
  4. Quando ocorre uma exceção, retiro os dados que desejo do cache do aplicativo por meio do ID de sessão armazenado na solicitação (especificamente, no cookie).Eu gero um NameValueCollection a partir desses dados e o envio de volta para o httpmodule por meio dos argumentos OnBuilding.
  5. Os dados são então renderizados para email de forma semelhante à forma como a seção de variáveis ​​do servidor é renderizada.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top