diff --git a/google-cloud-logging/src/main/java/com/google/cloud/logging/LoggingHandler.java b/google-cloud-logging/src/main/java/com/google/cloud/logging/LoggingHandler.java index 435a0aea5030..24399fac823b 100644 --- a/google-cloud-logging/src/main/java/com/google/cloud/logging/LoggingHandler.java +++ b/google-cloud-logging/src/main/java/com/google/cloud/logging/LoggingHandler.java @@ -206,7 +206,7 @@ public LoggingHandler( this.enhancers.addAll(enhancersParam); - List loggingEnhancers = MonitoredResourceUtil.getResourceEnhancers(); + List loggingEnhancers = MonitoredResourceUtil.createResourceEnhancers(); if (loggingEnhancers != null) { this.enhancers.addAll(loggingEnhancers); } diff --git a/google-cloud-logging/src/main/java/com/google/cloud/logging/MonitoredResourceUtil.java b/google-cloud-logging/src/main/java/com/google/cloud/logging/MonitoredResourceUtil.java index 301740acde76..526ec84599a3 100644 --- a/google-cloud-logging/src/main/java/com/google/cloud/logging/MonitoredResourceUtil.java +++ b/google-cloud-logging/src/main/java/com/google/cloud/logging/MonitoredResourceUtil.java @@ -19,10 +19,13 @@ import com.google.cloud.MetadataConfig; import com.google.cloud.MonitoredResource; import com.google.cloud.ServiceOptions; +import com.google.cloud.logging.LogEntry.Builder; import com.google.common.base.Strings; import com.google.common.collect.ImmutableMap; + import java.util.ArrayList; import java.util.Collections; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -72,6 +75,8 @@ String getKey() { } } + private static final String APPENGINE_LABEL_PREFIX = "appengine.googleapis.com/"; + private static Map resourceTypeWithLabels; static { @@ -80,15 +85,13 @@ String getKey() { .put( Resource.GaeAppFlex.getKey(), new Label[] { - Label.InstanceName, - Label.ModuleId, - Label.VersionId, - Label.InstanceId, - Label.Zone + Label.ModuleId, + Label.VersionId, + Label.Zone }) .put( Resource.GaeAppStandard.getKey(), - new Label[] {Label.AppId, Label.ModuleId, Label.VersionId}) + new Label[] {Label.ModuleId, Label.VersionId}) .put(Resource.Container.getKey(), new Label[] {Label.ClusterName, Label.Zone}) .put(Resource.GceInstance.getKey(), new Label[] {Label.InstanceId, Label.Zone}) .build(); @@ -124,11 +127,12 @@ public static MonitoredResource getResource(String projectId, String resourceTyp /** * Returns custom log entry enhancers (if available) for resource type. + * * @return custom long entry enhancers */ - public static List getResourceEnhancers() { + public static List createResourceEnhancers() { Resource resourceType = getAutoDetectedResourceType(); - return getEnhancers(resourceType); + return createEnhancers(resourceType); } private static String getValue(Label label) { @@ -192,19 +196,54 @@ private static String getAppEngineInstanceName() { return System.getenv("GAE_INSTANCE"); } - private static List getEnhancers(Resource resourceType) { - List enhancers; + private static List createEnhancers(Resource resourceType) { + List enhancers = new ArrayList<>(2); switch (resourceType) { // Trace logging enhancer is supported on GAE Flex and Standard. - case GaeAppStandard: case GaeAppFlex: - enhancers = new ArrayList<>(); - enhancers.add(new TraceLoggingEnhancer()); + enhancers.add(new LabelLoggingEnhancer( + APPENGINE_LABEL_PREFIX, Collections.singletonList(Label.InstanceName))); + enhancers.add(new TraceLoggingEnhancer(APPENGINE_LABEL_PREFIX)); + break; + case GaeAppStandard: + enhancers.add(new TraceLoggingEnhancer(APPENGINE_LABEL_PREFIX)); break; default: - enhancers = Collections.emptyList(); break; } return enhancers; } + + /** + * Adds additional resource-based labels to log entries. + * Labels that can be provided with {@link MonitoredResource.Builder#addLabel(String, String)} + * are restricted to a supported set per resource. + * + * @see Logging Labels + */ + private static class LabelLoggingEnhancer implements LoggingEnhancer { + + private final Map labels; + + LabelLoggingEnhancer(String prefix, List