Yes - you can get this stack information using the following templates in the template layout:
%type %file %line %method %location %class
See this PatternLayout documentation for more information.
Edit in response to the comment below:. I donβt think log4net can be configured to write the whole package.
You can always refuse to write for yourself using something like new StackTrace().ToString() , but I assume that you ask if you want this to be configured in the logging configuration.
I will have a deeper look, but I feel that there is no way to customize this, and you will have to implement your own Layout class.
Edit ++ OK - here is the class of the custom template template, which comes from PatternLayout , but adds% layout to the stack.
This code is a little rough - just an illustrative, not a finished product! (for example, you may not have permission to access the stack you are trying to print)
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()); } } } }
You can then configure this with the following template configuration (note the% stack at the end of the layout):
<layout type="ScratchPad.CustomPatternLayout,ScratchPad"> <conversionPattern value="%date %-5level %message%newline %type %file %line %method %location %class %stack" /> </layout>
Rob levine
source share