Skip to content

MDC fields not properly logged #23

@msche

Description

@msche

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)
    }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions