Да - вы можете получить эту информацию стека, используя следующие шаблоны в макете шаблона:
%type %file %line %method %location %class
См. эту документацию по PatternLayout для получения дополнительной информации.
Отредактируйте в ответ на комментарий Иана ниже: Я не думаю, log4net можно настроить для записи всего стека.
Вы всегда можете сами написать об этом, используя что-то вроде new StackTrace().ToString()
, но я предполагаю, что причина, по которой вы спрашиваете, заключается в том, что вы хотите, чтобы это можно было настроить в конфигурации регистрации.
У меня будет более глубокий взгляд, но мое внутреннее чувство состоит в том, что нет способа настроить это, и что вам в конечном итоге придется реализовать свой собственный класс Layout.
Edit ++
ОК - вот пользовательский класс макета шаблона, который наследуется от PatternLayout
, но добавляет в макет% стека.
Этот код немного грубоват - только для иллюстрации - не готов к производству! (например, у вас может не быть разрешения безопасности для доступа к стопке, которую вы пытаетесь распечатать)
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());
}
}
}
}
Затем вы можете настроить это с помощью следующей конфигурации шаблона (отметьте% stack в конце макета):
<layout type="ScratchPad.CustomPatternLayout,ScratchPad">
<conversionPattern value="%date %-5level %message%newline %type %file %line %method %location %class %stack" />
</layout>