Sí - usted puede conseguir esta información de la pila utilizando los siguientes patrones en un diseño de patrón:
%type %file %line %method %location %class
Consulte la documentación this en PatternLayout para obtener más información.
Editar en respuesta al comentario de Ian continuación: yo no creo log4net se puede configurar para escribir toda la pila.
Siempre puede volver a escribirlo usted mismo, utilizando algo como new StackTrace().ToString()
, pero supongo que la razón por la que pregunta es desea que esto sea configurable en la configuración de registro.
Tendré un aspecto más profundo, pero mi intuición es que no hay forma de configurar esto, y que terminaría teniendo que implementar su propia clase de diseño.
Editar ++ OK - aquí es una clase de diseño de patrón personalizado que se deriva de PatternLayout
pero añade en una pila% diseño.
Este código es un poco áspero - solo ilustrativo - ¡no está listo para la producción! (Por ejemplo, puede que no tenga permiso de seguridad para acceder a la pila que está intentando imprimir)
public class CustomPatternLayout : PatternLayout
{
public CustomPatternLayout()
{
this.AddConverter("stack", typeof(StackTraceConverter));
}
}
public class StackTraceConverter : PatternLayoutConverter
{
protected override void Convert(TextWriter writer, LoggingEvent loggingEvent)
{
var stack = new StackTrace();
var frames = stack.GetFrames();
for (var i = 0; i < frames.Length; i++)
{
var frame = frames[i];
// if the stack frame corresponds to still being inside the log4net assembly, skip it.
if (frame.GetMethod().DeclaringType.Assembly != typeof(LogManager).Assembly)
{
writer.WriteLine("{0}.{1} line {2}",
frame.GetMethod().DeclaringType.FullName,
frame.GetMethod().Name,
frame.GetFileLineNumber());
}
}
}
}
entonces usted puede configurar esto con la siguiente configuración de patrones (nota% pila al final del trazado):
<layout type="ScratchPad.CustomPatternLayout,ScratchPad">
<conversionPattern value="%date %-5level %message%newline %type %file %line %method %location %class %stack" />
</layout>
No es el método log4net Error (cadena, Excepción) suficiente para ¿esta? – CodeMonkeyKing
@CodeMonkeyKing - Creo que el OP dice que quiere registrar el seguimiento de la pila en algunos escenarios donde no tiene una excepción. –