É possível fazer o seguinte usando o ELMAH?
logger.Log(" something");
Estou fazendo algo parecido com isto:
try
{
// Code that might throw an exception
}
catch(Exception ex)
{
// I need to log error here...
}
Essa exceção não será registrada automaticamente pelo ELMAH, porque foi tratada.
Respostas:
Método de gravação direta de log, trabalhando desde o ELMAH 1.0:
O ELMAH 1.2 apresenta uma API mais flexível:
Há uma diferença entre as duas soluções:
Raise
O método aplica regras de filtragem ELMAH à exceção.Log
método não.Raise
é baseado em assinatura e é capaz de registrar uma exceção nos vários registradores.fonte
Elmah.ErrorLog.Log()
: ele lança caso a chamada de log falhe, possivelmente derrubando o aplicativo Web inteiro.Raise()
falha silenciosamente. Por exemplo: se houver um problema de configuração incorreta no servidor (por exemplo, o Elmah estiver configurado para salvar os erros no disco, mas não tiver o acesso correto à pasta de logs), o.Log()
método será lançado. (Isso é bom para a depuração, porém, por exemplo, por que não.Raise()
log qualquer coisa?)Eu recomendo encerrar a chamada para Elmah em uma classe de wrapper simples.
Em seguida, basta chamá-lo sempre que precisar registrar um erro.
Isso tem os seguintes benefícios:
Nota: eu adicionei uma propriedade 'contextualMessage' para informações contextuais. Você pode omitir isso, se preferir, mas acho muito útil. O Elmah desembrulha automaticamente as exceções para que a exceção subjacente ainda seja relatada no log, mas o contextualMessage ficará visível quando você clicar nele.
fonte
// uh oh! just keep going
. Se meu tratamento de erros estiver falhando, quero saber. Eu quero fazer algum barulho.Você pode usar o método Elmah.ErrorSignal () para registrar um problema sem gerar uma exceção.
fonte
fonte
Sim, é possível. O ELMAH foi projetado para interceptar exceções não tratadas. No entanto, você pode sinalizar uma exceção para o ELMAH através da classe ErrorSignal. Essas exceções não são lançadas (não fazem bolhas), mas são enviadas apenas para o ELMAH (e para os assinantes do evento Raise da classe ErrorSignal).
Um pequeno exemplo:
fonte
Eu estava procurando fazer a mesma coisa em um encadeamento em que comecei a enfileirar emails no meu aplicativo MVC4; portanto, não tinha o HttpContext disponível quando uma exceção foi gerada. Para fazer isso, terminei com o seguinte com base nesta pergunta e em outra resposta encontrada aqui: elmah: exceções sem o HttpContext?
No arquivo de configuração, especifiquei um nome de aplicativo:
Em seguida, no código (como a resposta fornecida acima, mas sem o HttpContext), você pode passar nulo em vez de um HttpContext:
fonte
packages.config
aparência? Você vê algo como<package id="elmah" version="1.2.2" targetFramework="net45" />
<package id="elmah.corelibrary" version="1.2.2" targetFramework="net45" />
<package id="elmah.sqlserver" version="1.2" targetFramework="net45" />'
:? Você instalou com o NuGET?packages.config
Às vezes,
CurrentHttpContext
pode não estar disponível.Definir
Usar
fonte
Estou no núcleo do ASP.NET e uso o ElmahCore .
Para registrar manualmente erros com o HttpContext (no controlador), basta escrever:
Em outra parte do seu aplicativo sem o HttpContext :
fonte
Eu estava tentando gravar mensagens personalizadas em logs elmah usando Signal.FromCurrentContext (). Raise (ex); e constatou que essas exceções estão surgindo, por exemplo:
Além disso, não vejo como o elmah suporta diferentes níveis de registro - é possível desativar o registro detalhado por meio de uma configuração web.config?
fonte
Utilizou esta linha e funciona perfeitamente bem.
fonte