¿Cómo registrar el seguimiento de la pila con log4net? Estoy usando la versión .net.Cómo registrar el seguimiento de la pila usando log4net (C#)
El camino que tengo es Log.Error (ex).
Gracias
¿Cómo registrar el seguimiento de la pila con log4net? Estoy usando la versión .net.Cómo registrar el seguimiento de la pila usando log4net (C#)
El camino que tengo es Log.Error (ex).
Gracias
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.
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.
Debe asegurarse de que la definición del patrón de diseño esté estructurada para dar salida a qué formato y datos desea.
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.
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);
...
}
}
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);
}
¿Tiene un problema particular con la salida de Log.Error (ex)? –