Hello,
In this case and as per LogEventInfo documentation:
UserStackFrame get the stack frame of the method that did the logging.
You need to set the Stack Trace using
setStackTrace method of the LogEventInfo class. And just to be sure maybe after do the validation on
userStackFrame you can use
HasStackTrace method to check that everything is correct just a suggestion.
Code:
protected override void Write(LogEventInfo loggingEvent)
{
try
{
var renderedEvent = Layout.Render(loggingEvent);
var stack = new StackTrace();
int userFrameIndex = stack.FrameCount;
loggingEvent.setStackTrace(stack,userFrameIndex);
var messageBuilder = new GelfMessageBuilder(renderedEvent, HostName, loggingEvent.TimeStamp, ToGelf(loggingEvent.Level))
.SetAdditionalField(GelfAdditionalFields.Facility, Facility)
.SetAdditionalField(GelfAdditionalFields.LoggerName, loggingEvent.LoggerName);
if (IncludeSource)
{
if(loggingEvent.HasStackTrace)
{
var userStackFrame = loggingEvent.UserStackFrame;
}
if (userStackFrame != null)
{
messageBuilder.SetAdditionalField(GelfAdditionalFields.SourceFileName, userStackFrame.GetFileName());
messageBuilder.SetAdditionalField(GelfAdditionalFields.SourceLineNumber, userStackFrame.GetFileLineNumber().ToString(CultureInfo.InvariantCulture));
}
}
I hope this can help you.
Best Regards!