2121import com .google .cloud .MonitoredResource ;
2222import com .google .cloud .logging .Logging .WriteOption ;
2323import com .google .common .collect .ImmutableList ;
24-
24+ import com . google . common . collect . ImmutableMap ;
2525import java .util .ArrayList ;
2626import java .util .Collections ;
2727import java .util .LinkedList ;
@@ -97,6 +97,8 @@ public class LoggingHandler extends Handler {
9797 private static final String HANDLERS_PROPERTY = "handlers" ;
9898 private static final String ROOT_LOGGER_NAME = "" ;
9999 private static final String [] NO_HANDLERS = new String [0 ];
100+ private static final String LEVEL_NAME_KEY = "levelName" ;
101+ private static final String LEVEL_VALUE_KEY = "levelValue" ;
100102
101103 private static final ThreadLocal <Boolean > inPublishCall = new ThreadLocal <>();
102104
@@ -106,6 +108,7 @@ public class LoggingHandler extends Handler {
106108 private volatile Logging logging ;
107109 private Level flushLevel ;
108110 private long flushSize ;
111+ private final Level nativeLevel ;
109112 private final List <Enhancer > enhancers ;
110113
111114 /**
@@ -169,14 +172,29 @@ public LoggingHandler(String log, LoggingOptions options, MonitoredResource moni
169172 this .options = options != null ? options : LoggingOptions .getDefaultInstance ();
170173 this .flushLevel = helper .getLevelProperty (className + ".flushLevel" , LoggingLevel .ERROR );
171174 this .flushSize = helper .getLongProperty (className + ".flushSize" , 1L );
172- setLevel (helper .getLevelProperty (className + ".level" , Level .INFO ));
175+
176+ Level level = helper .getLevelProperty (className + ".level" , Level .INFO );
177+ setLevel (level );
178+ nativeLevel = level ;
179+
173180 setFilter (helper .getFilterProperty (className + ".filter" , null ));
174181 setFormatter (helper .getFormatterProperty (className + ".formatter" , new SimpleFormatter ()));
175182 String logName = firstNonNull (log , helper .getProperty (className + ".log" , "java.log" ));
176183 this .enhancers = enhancers != null ? enhancers : helper .getEnhancerProperty (className + ".enhancers" );
177184 String resourceType = helper .getProperty (className + ".resourceType" , "global" );
178185 MonitoredResource resource = monitoredResource != null ? monitoredResource : getDefaultResource (resourceType );
179- writeOptions = new WriteOption []{WriteOption .logName (logName ), WriteOption .resource (resource )};
186+
187+ writeOptions =
188+ new WriteOption [] {
189+ WriteOption .logName (logName ),
190+ WriteOption .resource (resource ),
191+ WriteOption .labels (
192+ ImmutableMap .of (
193+ LEVEL_NAME_KEY ,
194+ nativeLevel .getName (),
195+ LEVEL_VALUE_KEY ,
196+ nativeLevel .intValue () + "" ))
197+ };
180198 } catch (Exception ex ) {
181199 reportError (null , ex , ErrorManager .OPEN_FAILURE );
182200 throw ex ;
@@ -223,7 +241,7 @@ private MonitoredResource getDefaultResource(String resourceType) {
223241 return builder .build ();
224242 }
225243
226- private static class LogConfigHelper {
244+ static class LogConfigHelper {
227245
228246 private final LogManager manager = LogManager .getLogManager ();
229247
@@ -356,16 +374,19 @@ public void publish(LogRecord record) {
356374 }
357375
358376 private LogEntry entryFor (LogRecord record ) {
359- String payload ;
360377 try {
361- payload = getFormatter ().format (record );
378+ String payload = getFormatter ().format (record );
362379 Level level = record .getLevel ();
363380 LogEntry .Builder builder = LogEntry .newBuilder (Payload .StringPayload .of (payload ))
364- .addLabel ("levelName" , level .getName ())
365- .addLabel ("levelValue" , String .valueOf (level .intValue ()))
366381 .setTimestamp (record .getMillis ())
367382 .setSeverity (severityFor (level ));
368383
384+ if (!nativeLevel .equals (level )) {
385+ builder
386+ .addLabel ("levelName" , level .getName ())
387+ .addLabel ("levelValue" , String .valueOf (level .intValue ()));
388+ }
389+
369390 for (Enhancer enhancer : enhancers ) {
370391 enhancer .enhanceLogEntry (builder , record );
371392 }
0 commit comments