Skip to content

NPE when LoggingAppender copies values from MDC to LogEntry labels #5524

Description

@Alxbss

Stackdriver Logging
google-cloud-logging-logback:0.96.0-alpha

I use "ch.qos.logback.classic.helpers.MDCInsertingServletFilter" to set metadata of a request to logback MDC. It can set a null value to MDC, like "req.xForwardedFor" : null.

In turn, com.google.cloud.logging.logback.LoggingAppender copies key:value pairs from MDC to LogEntry.Builder labels. When LogEntry.Builder builds a LogEntry instance I got NullPointerException.

ERROR in com.google.cloud.logging.logback.LoggingAppender[CLOUD] - Appender [CLOUD] failed to append. java.lang.NullPointerException: null value in entry: req.xForwardedFor=null
at java.lang.NullPointerException: null value in entry: req.xForwardedFor=null
at at com.google.common.collect.CollectPreconditions.checkEntryNotNull(CollectPreconditions.java:32)
at at com.google.common.collect.ImmutableMap$Builder.put(ImmutableMap.java:250)
at at com.google.common.collect.ImmutableMap$Builder.put(ImmutableMap.java:265)
at at com.google.common.collect.ImmutableMap$Builder.putAll(ImmutableMap.java:293)
at at com.google.common.collect.ImmutableMap.copyOf(ImmutableMap.java:402)
at at com.google.common.collect.ImmutableMap.copyOf(ImmutableMap.java:383)
at at com.google.cloud.logging.LogEntry.(LogEntry.java:271)
at at com.google.cloud.logging.LogEntry$Builder.build(LogEntry.java:259)
at at com.google.cloud.logging.logback.LoggingAppender.logEntryFor(LoggingAppender.java:295)
at at com.google.cloud.logging.logback.LoggingAppender.append(LoggingAppender.java:213)
at at com.google.cloud.logging.logback.LoggingAppender.append(LoggingAppender.java:70)
at at ch.qos.logback.core.UnsynchronizedAppenderBase.doAppend(UnsynchronizedAppenderBase.java:84)
at at ch.qos.logback.core.spi.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:51)
at at ch.qos.logback.classic.Logger.appendLoopOnAppenders(Logger.java:270)
at at ch.qos.logback.classic.Logger.callAppenders(Logger.java:257)
at at ch.qos.logback.classic.Logger.buildLoggingEventAndAppend(Logger.java:421)
at at ch.qos.logback.classic.Logger.filterAndLog_1(Logger.java:398)
at at ch.qos.logback.classic.Logger.info(Logger.java:583)

I'm not sure, but I guess LoggingAppender should not add to LogEntry.Builder key:value pairs with null value.

I think it can be fixed here
https://github.com/googleapis/google-cloud-java/blob/master/google-cloud-clients/google-cloud-contrib/google-cloud-logging-logback/src/main/java/com/google/cloud/logging/logback/LoggingAppender.java#L280

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

🚨 criticalP0 critical issue. Requires immediate fixtriage meI really want to be triaged.

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions