Pregunta

He creado una excepción personalizada para un problema muy específico que puede ir mal.Puedo recibir datos de otro sistema, y me levante de la excepción si las bombas, mientras que tratando de analizar esos datos.En mi costumbre de excepción, he añadido un campo llamado "ResponseData", por lo que puedo ver exactamente lo que mi código no pudiera manejar.

En la costumbre de excepciones como esta, en caso de que la respuesta adicional de datos ir a la excepción "mensaje"?Si se va allí, el mensaje podría ser enorme.Creo que quiero es no porque yo estoy usando Elmah, y eso es lo que me puede llegar a los datos.

Así que la pregunta es:- ¿Cómo puedo obtener Elmah para registrar información adicional de un campo en una excepción personalizada O - Debería adicional detalles de la excepción entrar en el "mensaje" de la propiedad?

¿Fue útil?

Solución

Usted no debe llenar .Message con información de depuración, sino con una forma concisa y útil pieza de texto.

http://msdn.microsoft.com/en-us/library/system.exception.message.aspx

El texto del Mensaje debe describir completamente el error y debe, cuando sea posible, explique cómo corregirlo. El valor de la propiedad del Mensaje se incluye en la información devuelta por el método ToString.

El Mensaje de la propiedad se establece sólo cuando se crea una Excepción.Si no hay mensaje fue suministrada a el constructor de la instancia actual, el sistema suministra un mensaje predeterminado que es el formato con el actual sistema de la cultura.

[..]

Notas para los Herederos:

El Mensaje de la propiedad se reemplaza en las clases que requieren un control sobre el contenido del mensaje o de formato.El código de la aplicación normalmente se accede a esta propiedad cuando se necesita para mostrar información acerca de una excepción que ha sido capturado.

El mensaje de error debe ser localizada.

Los datos de respuesta, no califica como una descripción.

No estar familiarizado con la elmah, yo no te puedo decir cómo extender la Exception en clase, mientras que el uso de la misma.¿Elmah implementar su propia subclase Exception?O una interfaz?Puede subclase a ti mismo?

Otros consejos

En la costumbre de excepciones como esta,en la debe el extra de los datos de respuesta a ir en la excepción "mensaje"?

No, como Sören ya se señaló.Sin embargo, su tipo de excepción podría anular ToString y sensatez agregar los datos de respuesta de la información allí.Esto es perfectamente normal de la práctica seguida por muchos de los tipos de excepción en la BCL (Biblioteca de clases Base) por lo que no encuentras nadando contra la corriente.Por ejemplo, eche un vistazo a la Sistema.IO.FileNotFoundException.ToString aplicación en SSCLI (Rotor):

public override String ToString()
{
    String s = GetType().FullName + ": " + Message;

    if (_fileName != null && _fileName.Length != 0)
        s += Environment.NewLine + String.Format(Environment.GetResourceString("IO.FileName_Name"), _fileName);

    if (InnerException != null)
        s = s + " ---> " + InnerException.ToString();

    if (StackTrace != null)
        s += Environment.NewLine + StackTrace;

    try
    {
        if(FusionLog!=null)
        {
            if (s==null)
                s=" ";
            s+=Environment.NewLine;
            s+=Environment.NewLine;
            s+="Fusion log follows: ";
            s+=Environment.NewLine;
            s+=FusionLog;
        }
    }
    catch(SecurityException)
    {

    }
    return s;
}

Como se puede ver, se anexa el contenido de FusionLog la propiedad, que representan extra la información en el caso de la asamblea errores de carga.

¿Cómo puedo obtener Elmah para grabar extra la información de un campo en una costumbre excepción

ELMAH almacena el resultado de llamar a ToString en una excepción como los detalles del error, por lo que si usted tiene ToString implementado según lo prescrito, la información se registra sin más trabajo.El único problema es que ha iniciado la sesión, los detalles van a ser no estructurados texto.

La Excepción de la clase contiene un diccionario (de Datos con nombre, creo) que puede utilizar para asociar datos personalizados con una vainilla excepción.

No entiendo bien la pregunta, pero parecen estar preguntando qué hacer con la excepción adicional de datos, si ese no es tu pregunta, siéntase libre de ignorar esto.

Creo que una pregunta importante que debemos hacernos es ¿qué es exactamente el mensaje de excepción para?No es para saber a dónde la excepción, el seguimiento de la pila es para que;no es para encapsular una excepción en uno más general, que debe hacerse con el InnerException campo;en el caso de que la excepción sólo se levantó de un lugar en particular en el código no es para describir qué tipo de error se había - eso es lo que el tipo de la excepción.

Generalmente yo uso el campo de mensaje para proporcionar simple, legible consejos que un programador que no es a mí, viendo este error en el primer tiempo se puede utilizar para obtener una comprensión del sistema subyacente.Considero que el campo de mensaje para ser apropiado para un corto (una frase) explicación, una sugerencia en cuanto a cómo este error es a menudo elevado, o una referencia a una nueva lectura.

Así que, como tengo entendido tu pregunta, creo que la mejor manera de almacenar esta "información adicional" que se recibe de otro sistema es como un InnerException.No sé Elmah, pero si es digno de su sal buscará InnerExceptions y almacenarlos.

No entiendo la pregunta es: ¿estás ampliando el Sistema.Excepción, y se ha añadido el Elmah campo.Que es donde pertenece-como una propiedad pública de la excepción de sí mismo.

Elmah es un módulo http que los registros de las excepciones no controladas.

Supongo que es sólo una limitación de Elmah, ya que no almacena los campos personalizados.Supongo que voy a tener que pedir a los chicos.Tengo el campo extra de allí para que los datos de respuesta, pero Elmah no se almacenan.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top