Skip to content

Commit b661c62

Browse files
committed
Improve logger error reporting
Handler initialization may now call user supplied code in enhancers during initialization and logging. This commit catches any exceptions thrown and uses the existing error reporting mechanism to log the exception the stderr. The GaeFlexEnhancer now separately logs any exception when obtaining the zone, but does not throw it as having the zone is only optional and should be non fatal to the logger.
1 parent ff35c4b commit b661c62

2 files changed

Lines changed: 38 additions & 29 deletions

File tree

google-cloud-logging/src/main/java/com/google/cloud/logging/GaeFlexLoggingEnhancer.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package com.google.cloud.logging;
1818

1919
import java.io.BufferedReader;
20+
import java.io.IOException;
2021
import java.io.InputStreamReader;
2122
import java.net.HttpURLConnection;
2223
import java.net.URL;
@@ -91,8 +92,9 @@ public void enhanceMonitoredResource(Builder builder) {
9192
builder.addLabel("zone", zone);
9293
}
9394
}
94-
} catch (Exception e) {
95-
// unable to fetch zone;
95+
} catch (IOException ex) {
96+
// report the error, but do not throw as the inclusion of zone is optional
97+
ex.printStackTrace();
9698
}
9799
}
98100

google-cloud-logging/src/main/java/com/google/cloud/logging/LoggingHandler.java

Lines changed: 34 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -163,19 +163,25 @@ public LoggingHandler(String log, LoggingOptions options, MonitoredResource moni
163163
* or {@link LogEntry} instances built by this handler.
164164
*/
165165
public LoggingHandler(String log, LoggingOptions options, MonitoredResource monitoredResource, List<Enhancer> enhancers) {
166-
LogConfigHelper helper = new LogConfigHelper();
167-
String className = getClass().getName();
168-
this.options = options != null ? options : LoggingOptions.getDefaultInstance();
169-
this.flushLevel = helper.getLevelProperty(className + ".flushLevel", LoggingLevel.ERROR);
170-
this.flushSize = helper.getLongProperty(className + ".flushSize", 1L);
171-
setLevel(helper.getLevelProperty(className + ".level", Level.INFO));
172-
setFilter(helper.getFilterProperty(className + ".filter", null));
173-
setFormatter(helper.getFormatterProperty(className + ".formatter", new SimpleFormatter()));
174-
String logName = firstNonNull(log, helper.getProperty(className + ".log", "java.log"));
175-
this.enhancers = enhancers != null ? enhancers : helper.getEnhancerProperty(className + ".enhancers");
176-
String resourceType = helper.getProperty(className + ".resourceType", "global");
177-
MonitoredResource resource = monitoredResource != null ? monitoredResource : getDefaultResource(resourceType);
178-
writeOptions = new WriteOption[]{WriteOption.logName(logName), WriteOption.resource(resource)};
166+
try {
167+
LogConfigHelper helper = new LogConfigHelper();
168+
String className = getClass().getName();
169+
this.options = options != null ? options : LoggingOptions.getDefaultInstance();
170+
this.flushLevel = helper.getLevelProperty(className + ".flushLevel", LoggingLevel.ERROR);
171+
this.flushSize = helper.getLongProperty(className + ".flushSize", 1L);
172+
setLevel(helper.getLevelProperty(className + ".level", Level.INFO));
173+
setFilter(helper.getFilterProperty(className + ".filter", null));
174+
setFormatter(helper.getFormatterProperty(className + ".formatter", new SimpleFormatter()));
175+
String logName = firstNonNull(log, helper.getProperty(className + ".log", "java.log"));
176+
this.enhancers = enhancers != null ? enhancers : helper.getEnhancerProperty(className + ".enhancers");
177+
String resourceType = helper.getProperty(className + ".resourceType", "global");
178+
MonitoredResource resource = monitoredResource != null ? monitoredResource : getDefaultResource(resourceType);
179+
writeOptions = new WriteOption[]{WriteOption.logName(logName), WriteOption.resource(resource)};
180+
}
181+
catch (Exception ex) {
182+
reportError(null, ex, ErrorManager.OPEN_FAILURE);
183+
throw ex;
184+
}
179185
}
180186

181187
private static List<LoggingHandler> getLoggingHandlers(Logger logger) {
@@ -354,23 +360,24 @@ private LogEntry entryFor(LogRecord record) {
354360
String payload;
355361
try {
356362
payload = getFormatter().format(record);
363+
Level level = record.getLevel();
364+
LogEntry.Builder builder = LogEntry.newBuilder(Payload.StringPayload.of(payload))
365+
.addLabel("levelName", level.getName())
366+
.addLabel("levelValue", String.valueOf(level.intValue()))
367+
.setTimestamp(record.getMillis())
368+
.setSeverity(severityFor(level));
369+
370+
for (Enhancer enhancer : enhancers) {
371+
enhancer.enhanceLogEntry(builder, record);
372+
}
373+
enhanceLogEntry(builder, record);
374+
return builder.build();
357375
} catch (Exception ex) {
358-
// Formatting can fail but we should not throw an exception, we report the error instead
376+
// Formatting or enhancing can fail but we should not throw an exception,
377+
// we report the error instead
359378
reportError(null, ex, ErrorManager.FORMAT_FAILURE);
360379
return null;
361380
}
362-
Level level = record.getLevel();
363-
LogEntry.Builder builder = LogEntry.newBuilder(Payload.StringPayload.of(payload))
364-
.addLabel("levelName", level.getName())
365-
.addLabel("levelValue", String.valueOf(level.intValue()))
366-
.setTimestamp(record.getMillis())
367-
.setSeverity(severityFor(level));
368-
369-
for (Enhancer enhancer : enhancers) {
370-
enhancer.enhanceLogEntry(builder, record);
371-
}
372-
enhanceLogEntry(builder, record);
373-
return builder.build();
374381
}
375382

376383
@Deprecated
@@ -493,7 +500,7 @@ public static void addHandler(Logger logger, LoggingHandler handler) {
493500
* A Log Enhancer.
494501
* May be used to enhance the {@link MonitoredResource} and/or the {@link LogEntry}
495502
*/
496-
public interface Enhancer {
503+
interface Enhancer {
497504
void enhanceMonitoredResource(MonitoredResource.Builder builder);
498505
void enhanceLogEntry(LogEntry.Builder builder, LogRecord record);
499506
}

0 commit comments

Comments
 (0)