Pergunta

Quando utilizar o ELMAH (que é brilhante) é possível visualizar informações adicionais que você tenha adicionado a uma exceção.

E. g.

Exception ex = new Exception("New exception to use ErrorSignal functionality");
ex.Data.Add("ExtraInfo", "Here is some extra information i would like to be displayed.");
ErrorSignal.FromCurrentContext().Raise(ex);    

Quando eu ver a excepção de elmah.axd não parecem mostrar que o "ExtraInfo" a chave e o valor de informação, somente a cadeia de excepção.

Foi útil?

Solução

Não, não é possível visualizar as informações extras com as versões 1.x atuais.

Outras dicas

A minha solução foi adicionar as informações para o Servidor da coleção de Variáveis como isso.

var context = HttpContext.Current;
context.Request.ServerVariables["ERROR_CALLING_WEBSERVICE_URI"] = uri;
Elmah.ErrorLog.GetDefault(context).Log(new Error(e, context))

Sim, eu Acho que isso é um hack.
Para pequenas quantidades de dados adicionais considere a possibilidade de encapsular o erro, como sugerido por @Roma
No entanto, este método é especialmente útil quando você tem informação demais para colocar em um "encapsulado mensagem de erro'

A maneira simples de dar a volta é encapsular o erro. O erro externo conterá sua mensagem personalizada.

string msg = "my custom error message";

ErrorSignal.FromCurrentContext().Raise(
               new Elmah.ApplicationException(msg,ex));

Ok, então eu tenho esperado que isso seja incluído há muito tempo e decidi fazer um garfo próprio e incluir o recurso.

Você pode encontrá-lo aqui: https://github.com/boena/elmah-with-custom-data

Elmah usa o método tostring () para obter detalhes de exceção. Basta substituir seu método de tostring () de exceção personalizado e dessa maneira funcionará:

sample exception in elmah

Minha aula de exceção:

public class MyCustomException : Exception
{
    public string CustomProperty { get; set; }

    public MyCustomException(string message, string customProperty): base(message)
    {
        this.CustomProperty = customProperty;
    }

    public override string ToString()
    {
        var result = base.ToString();
        var propertyData = String.Format("CustomProperty: {0}", this.CustomProperty);

        return result.Insert(
            result.IndexOf(Environment.NewLine),
            Environment.NewLine + propertyData
            );
    }
}

Bem, depois de ter passado o dia a trabalhar sobre isso, eu pensei que eu iria partilhar a minha solução.Muito semelhante ao Mis a solução acima, com a diferença de eu modificar o erro objeto usado por elmah em vez do servidor de solicitação de variáveis, como:

    public static void LogError(Exception e, IDictionary<string, string> customFields = null)
    {
        var logger = ErrorLog.GetDefault(HttpContext.Current);

        customFields = customFields ?? new Dictionary<string, string>();

        // Used to tell elmah not to log this twice (See global.asax)
        e.Data.Add("Logged", true);

        var error = new Error(e, HttpContext.Current);

        customFields.ForEach(pair => error.ServerVariables.Add(pair.Key, pair.Value));

        logger.Log(error);
    }

Então, dependendo do seu aplicativo para chamar logger.LogError:

mvc adicionar um erro personalizado (filtro dehttp://maheshde.blogspot.ca/2012/09/error-handing-with-mvc-using-custom.html)

webforms substituir Application_Error global.asax

Em seguida, apenas uma etapa final global.asax, descartar quaisquer erros que já foram registrados:

public void ErrorLog_Filtering(object sender, ExceptionFilterEventArgs e)
{
    if (e.Exception.Data.Contains("Logged"))
    {
        if (e.Exception.Data["Logged"].Equals(true)) e.Dismiss();
    }
}

Como é de código aberto, você pode simplesmente pegar o projeto e personalizar Elmah para seus próprios propósitos:

http://code.google.com/p/elmah/

Se você estiver usando mssql

  • Dê uma olhada no sqlerrorlog.cs

  • Sqlserver.sql para gerar seu próprio banco de dados

Estou fazendo o mesmo, mas preciso adicionar uma coluna de "código de erro" gerada aleatoriamente e usarei dados de exceção para rastrear todas as informações personalizadas, de sessão, formulário e cookies que normalmente estariam no XML grande campo. Posso mudar isso para JSON, ainda não tenho certeza.

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