2012-02-16 24 views

Respuesta

0

Sólo try ... catch la exception y dar a esa excepción en el método de registro:

try 
{ 
    // ... code that throws exception 
} 
catch (Exeption ex) 
{ 
    myLogger.Error(ex); 
} 

Esta sobrecarga llama implícitamente al método ToString() de la excepción que imprime la pila de llamadas en su registro.

7

Hay dos formas básicas, una que toma un objeto y una excepción explícita:

catch(Exception ex) 
{ 
    // the form that takes two args has an exception as second, prints trace... 
    _log.Error("My custom message", ex); 
} 

Y uno que toma cualquier objeto y realiza una ToString() en él:

catch(Exception ex) 
{ 
    // the form that takes one arg uses ToString() 
    _log.Error(ex); 
} 

El primero permite Adjunte un mensaje más significativo en la entrada del registro primero para dar cualquier detalle adicional que desee. Este último va a hacer el trabajo, pero sólo muestra los detalles de la excepción usando ToString(), que le ofrece:

La implementación predeterminada de ToString obtiene el nombre de la clase que lanzó la excepción actual, el mensaje, el resultado de la llamada ToString en la excepción interna, y el resultado de llamar a Environment.StackTrace. Si alguno de estos miembros es Nothing, su valor no está incluido en la cadena devuelta.

13

Debe asegurarse de que la definición del patrón de diseño esté estructurada para dar salida a qué formato y datos desea.

log4Net Pattern Layout

Se utiliza para el seguimiento de pila de salida del registro de eventos El Seguimiento de la pila nivel especificador puede estar encerrada entre llaves. Por ejemplo, % stacktrace {level}. Si no se da ningún especificador de nivel de seguimiento de la pila después 1 se supone

salida utiliza el formato: type3.MethodCall3> type2.MethodCall2> type1.MethodCall1

Este patrón no está disponible para los conjuntos Compact Framework.

20

Utilice esta:

void Error(object message,Exception t) 

La razón está en la documentación log4net para void Error(object message):

ADVERTENCIA Tenga en cuenta que el paso de una excepción a este método va a imprimir el nombre de la excepción, pero sin seguimiento de la pila. Para imprimir un trazado de pila, utilice el formulario void Error(object,Exception).

Error(object message, Exception t) es la forma más flexible para registrar datos de excepción porque va como una excepción en lugar de objetos y que puede ser utilizado en appenders para reducir registros a una clase de excepción en particular (en lugar de mediante la búsqueda de una cadena que es mucho más lento y menos consistente)

Hay versiones especiales de todos los métodos de registro no-formato que llevar el mensaje y la excepción:

namespace log4net 
{ 
    public interface ILog 
    { 
     ... 
     /* Log a message object and exception */ 
     void Debug(object message, Exception t); 
     void Info(object message, Exception t); 
     void Warn(object message, Exception t); 
     void Error(object message, Exception t); 
     void Fatal(object message, Exception t); 
     ... 
    } 
} 
0

puede ampliar la ILOG tener un método que registra sólo una excepción con su rastro de pila

public static void ErrorWithStackTrace(this ILog log, Exception exception) 
{ 
    log.Error(exception.Message,exception); 
    } 
Cuestiones relacionadas