logtail / logback-logtail

Better Stack Java Logback appender
https://betterstack.com/logs
MIT License
17 stars 4 forks source link

MDC fields not properly logged #23

Open msche opened 1 month ago

msche commented 1 month ago

Dear logtail team.

I think MDC fields are not properly logged due to the async approach of logtail. In my case I have a method like follows:

   try {
      MDC.put("TRACE_ID", UUID.randomUUID().toString());
      LOG.info("Do your thing");
    } finally {
      MDC.remove("TRACE_ID");
    }

Within log tail the logging event is queued and send later. At the moment of sending, the MDC field is already removed.

I made the following patch to Log tail that seems to fix the issue. At the moment of queuing the log event, I create a clone of the MDC context map so that I have the situation in the event as it was at the moment of logging.

class AsyncLogtailAppender : LogtailAppender() {

    override fun append(event: ILoggingEvent) {
        if (event is LoggingEvent) {
            event.mdcPropertyMap = MDC.getCopyOfContextMap()
        }
        super.append(event)
    }
}
curusarn commented 1 month ago

Thank you for the report and the fix suggestion @msche! I appreciate it!

I'm passing this to the team to get it fixed.

Thanks again!