From 410c0555185892a8e76a43b3483d1da613a1328f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Skj=C3=B8lberg?= Date: Tue, 26 Dec 2017 23:37:48 +0100 Subject: [PATCH] Add interface for enhancing Logback events --- .../logging/logback/LoggingAppender.java | 38 +++++++++++++++---- .../logging/logback/LoggingEventEnhancer.java | 29 ++++++++++++++ 2 files changed, 60 insertions(+), 7 deletions(-) create mode 100644 google-cloud-contrib/google-cloud-logging-logback/src/main/java/com/google/cloud/logging/logback/LoggingEventEnhancer.java diff --git a/google-cloud-contrib/google-cloud-logging-logback/src/main/java/com/google/cloud/logging/logback/LoggingAppender.java b/google-cloud-contrib/google-cloud-logging-logback/src/main/java/com/google/cloud/logging/logback/LoggingAppender.java index 9ac47ae617f4..8124754055c1 100644 --- a/google-cloud-contrib/google-cloud-logging-logback/src/main/java/com/google/cloud/logging/logback/LoggingAppender.java +++ b/google-cloud-contrib/google-cloud-logging-logback/src/main/java/com/google/cloud/logging/logback/LoggingAppender.java @@ -67,12 +67,14 @@ public class LoggingAppender extends UnsynchronizedAppenderBase { private volatile Logging logging; private List loggingEnhancers; + private List loggingEventEnhancers; private WriteOption[] defaultWriteOptions; private Level flushLevel; private String log; private String resourceType; private Set enhancerClassNames = new HashSet<>(); + private Set loggingEventEnhancerClassNames = new HashSet<>(); /** * Batched logging requests get immediately flushed for logs at or above this level. @@ -114,6 +116,11 @@ public void setResourceType(String resourceType) { public void addEnhancer(String enhancerClassName) { this.enhancerClassNames.add(enhancerClassName); } + + public void addLoggingEventEnhancer(String enhancerClassName) { + this.loggingEventEnhancerClassNames.add(enhancerClassName); + } + Level getFlushLevel() { return (flushLevel != null) ? flushLevel : Level.ERROR; @@ -128,11 +135,19 @@ MonitoredResource getMonitoredResource(String projectId) { } List getLoggingEnhancers() { - List loggingEnhancers = new ArrayList<>(); - if (enhancerClassNames != null) { - for (String enhancerClassName : enhancerClassNames) { + return getEnhancers(enhancerClassNames); + } + + List getLoggingEventEnhancers() { + return getEnhancers(loggingEventEnhancerClassNames); + } + + List getEnhancers(Set classNames) { + List loggingEnhancers = new ArrayList<>(); + if (classNames != null) { + for (String enhancerClassName : classNames) { if (enhancerClassName != null) { - LoggingEnhancer enhancer = getEnhancer(enhancerClassName); + T enhancer = getEnhancer(enhancerClassName); if (enhancer != null) { loggingEnhancers.add(enhancer); } @@ -142,10 +157,10 @@ List getLoggingEnhancers() { return loggingEnhancers; } - private LoggingEnhancer getEnhancer(String enhancerClassName) { + private T getEnhancer(String enhancerClassName) { try { - Class clz = - (Class) + Class clz = + (Class) Loader.loadClass(enhancerClassName.trim()); return clz.newInstance(); } catch (Exception ex) { @@ -170,6 +185,9 @@ public synchronized void start() { List resourceEnhancers = MonitoredResourceUtil.getResourceEnhancers(); loggingEnhancers.addAll(resourceEnhancers); loggingEnhancers.addAll(getLoggingEnhancers()); + loggingEventEnhancers = new ArrayList<>(); + loggingEventEnhancers.addAll(getLoggingEventEnhancers()); + super.start(); } @@ -227,6 +245,12 @@ private LogEntry logEntryFor(ILoggingEvent e) { } } + if (loggingEventEnhancers != null) { + for (LoggingEventEnhancer enhancer : loggingEventEnhancers) { + enhancer.enhanceLogEntry(builder, e); + } + } + return builder.build(); } diff --git a/google-cloud-contrib/google-cloud-logging-logback/src/main/java/com/google/cloud/logging/logback/LoggingEventEnhancer.java b/google-cloud-contrib/google-cloud-logging-logback/src/main/java/com/google/cloud/logging/logback/LoggingEventEnhancer.java new file mode 100644 index 000000000000..53aa518b4bb0 --- /dev/null +++ b/google-cloud-contrib/google-cloud-logging-logback/src/main/java/com/google/cloud/logging/logback/LoggingEventEnhancer.java @@ -0,0 +1,29 @@ +/* + * Copyright 2017 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.logging.logback; + +import com.google.cloud.logging.LogEntry; + +import ch.qos.logback.classic.spi.ILoggingEvent; + +/** + * An enhancer for {@linkplain ILoggingEvent} log entries. + * Used to add custom labels to the {@link LogEntry.Builder}. + */ +public interface LoggingEventEnhancer { + void enhanceLogEntry(LogEntry.Builder builder, ILoggingEvent e); +}