You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by vy...@apache.org on 2021/01/15 15:44:34 UTC
[logging-log4j2] 01/02: LOG4J2-2993 Simplify exception resolvers.
This is an automated email from the ASF dual-hosted git repository.
vy pushed a commit to branch LOG4J2-2993
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
commit 7cf58d4aa98801f5209ef2346a1485ca1a88343a
Author: Volkan Yazici <vo...@gmail.com>
AuthorDate: Fri Jan 8 17:31:46 2021 +0100
LOG4J2-2993 Simplify exception resolvers.
---
.../resolver/ExceptionInternalResolverFactory.java | 68 ----------
.../template/json/resolver/ExceptionResolver.java | 150 ++++++++++++---------
.../json/resolver/ExceptionRootCauseResolver.java | 91 +------------
3 files changed, 93 insertions(+), 216 deletions(-)
diff --git a/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/resolver/ExceptionInternalResolverFactory.java b/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/resolver/ExceptionInternalResolverFactory.java
deleted file mode 100644
index 31b70cf..0000000
--- a/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/resolver/ExceptionInternalResolverFactory.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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 org.apache.logging.log4j.layout.template.json.resolver;
-
-/**
- * Exception resolver factory.
- *
- * <h3>Configuration</h3>
- *
- * <pre>
- * config = field , [ stringified ]
- * field = "field" -> ( "className" | "message" | "stackTrace" )
- * stringified = "stringified" -> boolean
- * </pre>
- */
-abstract class ExceptionInternalResolverFactory {
-
- private static final EventResolver NULL_RESOLVER =
- (ignored, jsonGenerator) -> jsonGenerator.writeNull();
-
- EventResolver createInternalResolver(
- final EventResolverContext context,
- final TemplateResolverConfig config) {
- final String fieldName = config.getString("field");
- switch (fieldName) {
- case "className": return createClassNameResolver();
- case "message": return createMessageResolver(context);
- case "stackTrace": return createStackTraceResolver(context, config);
- }
- throw new IllegalArgumentException("unknown field: " + config);
-
- }
-
- abstract EventResolver createClassNameResolver();
-
- abstract EventResolver createMessageResolver(EventResolverContext context);
-
- private EventResolver createStackTraceResolver(
- final EventResolverContext context,
- final TemplateResolverConfig config) {
- if (!context.isStackTraceEnabled()) {
- return NULL_RESOLVER;
- }
- final boolean stringified = config.getBoolean("stringified", false);
- return stringified
- ? createStackTraceStringResolver(context)
- : createStackTraceObjectResolver(context);
- }
-
- abstract EventResolver createStackTraceStringResolver(EventResolverContext context);
-
- abstract EventResolver createStackTraceObjectResolver(EventResolverContext context);
-
-}
diff --git a/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/resolver/ExceptionResolver.java b/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/resolver/ExceptionResolver.java
index 415104a..5fc7a6d 100644
--- a/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/resolver/ExceptionResolver.java
+++ b/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/resolver/ExceptionResolver.java
@@ -17,75 +17,23 @@
package org.apache.logging.log4j.layout.template.json.resolver;
import org.apache.logging.log4j.core.LogEvent;
-import org.apache.logging.log4j.layout.template.json.JsonTemplateLayout;
import org.apache.logging.log4j.layout.template.json.util.JsonWriter;
/**
* Exception resolver.
- * <p>
- * Note that this resolver is toggled by {@link
- * JsonTemplateLayout.Builder#setStackTraceEnabled(boolean)}.
*
- * @see ExceptionInternalResolverFactory
+ * <h3>Configuration</h3>
+ *
+ * <pre>
+ * config = field , [ stringified ]
+ * field = "field" -> ( "className" | "message" | "stackTrace" )
+ * stringified = "stringified" -> boolean
+ * </pre>
*/
class ExceptionResolver implements EventResolver {
- private static final ExceptionInternalResolverFactory INTERNAL_RESOLVER_FACTORY =
- new ExceptionInternalResolverFactory() {
-
- @Override
- EventResolver createClassNameResolver() {
- return (final LogEvent logEvent, final JsonWriter jsonWriter) -> {
- final Throwable exception = logEvent.getThrown();
- if (exception == null) {
- jsonWriter.writeNull();
- } else {
- String exceptionClassName = exception.getClass().getCanonicalName();
- jsonWriter.writeString(exceptionClassName);
- }
- };
- }
-
- @Override
- EventResolver createMessageResolver(final EventResolverContext context) {
- return (final LogEvent logEvent, final JsonWriter jsonWriter) -> {
- final Throwable exception = logEvent.getThrown();
- if (exception == null) {
- jsonWriter.writeNull();
- } else {
- String exceptionMessage = exception.getMessage();
- jsonWriter.writeString(exceptionMessage);
- }
- };
- }
-
- @Override
- EventResolver createStackTraceStringResolver(final EventResolverContext context) {
- StackTraceStringResolver stackTraceStringResolver =
- new StackTraceStringResolver(context);
- return (final LogEvent logEvent, final JsonWriter jsonWriter) -> {
- final Throwable exception = logEvent.getThrown();
- if (exception == null) {
- jsonWriter.writeNull();
- } else {
- stackTraceStringResolver.resolve(exception, jsonWriter);
- }
- };
- }
-
- @Override
- EventResolver createStackTraceObjectResolver(final EventResolverContext context) {
- return (final LogEvent logEvent, final JsonWriter jsonWriter) -> {
- final Throwable exception = logEvent.getThrown();
- if (exception == null) {
- jsonWriter.writeNull();
- } else {
- context.getStackTraceObjectResolver().resolve(exception, jsonWriter);
- }
- };
- }
-
- };
+ private static final EventResolver NULL_RESOLVER =
+ (ignored, jsonGenerator) -> jsonGenerator.writeNull();
private final boolean stackTraceEnabled;
@@ -95,8 +43,84 @@ class ExceptionResolver implements EventResolver {
final EventResolverContext context,
final TemplateResolverConfig config) {
this.stackTraceEnabled = context.isStackTraceEnabled();
- this.internalResolver = INTERNAL_RESOLVER_FACTORY
- .createInternalResolver(context, config);
+ this.internalResolver = createInternalResolver(context, config);
+ }
+
+ EventResolver createInternalResolver(
+ final EventResolverContext context,
+ final TemplateResolverConfig config) {
+ final String fieldName = config.getString("field");
+ switch (fieldName) {
+ case "className": return createClassNameResolver();
+ case "message": return createMessageResolver();
+ case "stackTrace": return createStackTraceResolver(context, config);
+ }
+ throw new IllegalArgumentException("unknown field: " + config);
+
+ }
+
+ private EventResolver createClassNameResolver() {
+ return (final LogEvent logEvent, final JsonWriter jsonWriter) -> {
+ final Throwable exception = extractThrowable(logEvent);
+ if (exception == null) {
+ jsonWriter.writeNull();
+ } else {
+ String exceptionClassName = exception.getClass().getCanonicalName();
+ jsonWriter.writeString(exceptionClassName);
+ }
+ };
+ }
+
+ private EventResolver createMessageResolver() {
+ return (final LogEvent logEvent, final JsonWriter jsonWriter) -> {
+ final Throwable exception = extractThrowable(logEvent);
+ if (exception == null) {
+ jsonWriter.writeNull();
+ } else {
+ String exceptionMessage = exception.getMessage();
+ jsonWriter.writeString(exceptionMessage);
+ }
+ };
+ }
+
+ private EventResolver createStackTraceResolver(
+ final EventResolverContext context,
+ final TemplateResolverConfig config) {
+ if (!context.isStackTraceEnabled()) {
+ return NULL_RESOLVER;
+ }
+ final boolean stringified = config.getBoolean("stringified", false);
+ return stringified
+ ? createStackTraceStringResolver(context)
+ : createStackTraceObjectResolver(context);
+ }
+
+ private EventResolver createStackTraceStringResolver(EventResolverContext context) {
+ StackTraceStringResolver stackTraceStringResolver =
+ new StackTraceStringResolver(context);
+ return (final LogEvent logEvent, final JsonWriter jsonWriter) -> {
+ final Throwable exception = extractThrowable(logEvent);
+ if (exception == null) {
+ jsonWriter.writeNull();
+ } else {
+ stackTraceStringResolver.resolve(exception, jsonWriter);
+ }
+ };
+ }
+
+ private EventResolver createStackTraceObjectResolver(EventResolverContext context) {
+ return (final LogEvent logEvent, final JsonWriter jsonWriter) -> {
+ final Throwable exception = extractThrowable(logEvent);
+ if (exception == null) {
+ jsonWriter.writeNull();
+ } else {
+ context.getStackTraceObjectResolver().resolve(exception, jsonWriter);
+ }
+ };
+ }
+
+ Throwable extractThrowable(LogEvent logEvent) {
+ return logEvent.getThrown();
}
static String getName() {
diff --git a/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/resolver/ExceptionRootCauseResolver.java b/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/resolver/ExceptionRootCauseResolver.java
index 5218284..dfa9d0a 100644
--- a/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/resolver/ExceptionRootCauseResolver.java
+++ b/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/resolver/ExceptionRootCauseResolver.java
@@ -19,7 +19,6 @@ package org.apache.logging.log4j.layout.template.json.resolver;
import org.apache.logging.log4j.core.LogEvent;
import org.apache.logging.log4j.core.util.Throwables;
import org.apache.logging.log4j.layout.template.json.JsonTemplateLayout;
-import org.apache.logging.log4j.layout.template.json.util.JsonWriter;
/**
* Exception root cause resolver.
@@ -27,81 +26,14 @@ import org.apache.logging.log4j.layout.template.json.util.JsonWriter;
* Note that this resolver is toggled by {@link
* JsonTemplateLayout.Builder#setStackTraceEnabled(boolean)}.
*
- * @see ExceptionInternalResolverFactory
+ * @see ExceptionResolver
*/
-final class ExceptionRootCauseResolver implements EventResolver {
-
- private static final ExceptionInternalResolverFactory INTERNAL_RESOLVER_FACTORY =
- new ExceptionInternalResolverFactory() {
-
- @Override
- EventResolver createClassNameResolver() {
- return (final LogEvent logEvent, final JsonWriter jsonWriter) -> {
- final Throwable exception = logEvent.getThrown();
- if (exception == null) {
- jsonWriter.writeNull();
- } else {
- final Throwable rootCause = Throwables.getRootCause(exception);
- final String rootCauseClassName = rootCause.getClass().getCanonicalName();
- jsonWriter.writeString(rootCauseClassName);
- }
- };
- }
-
- @Override
- EventResolver createMessageResolver(final EventResolverContext context) {
- return (final LogEvent logEvent, final JsonWriter jsonWriter) -> {
- final Throwable exception = logEvent.getThrown();
- if (exception == null) {
- jsonWriter.writeNull();
- } else {
- final Throwable rootCause = Throwables.getRootCause(exception);
- final String rootCauseMessage = rootCause.getMessage();
- jsonWriter.writeString(rootCauseMessage);
- }
- };
- }
-
- @Override
- EventResolver createStackTraceStringResolver(final EventResolverContext context) {
- final StackTraceStringResolver stackTraceStringResolver =
- new StackTraceStringResolver(context);
- return (final LogEvent logEvent, final JsonWriter jsonWriter) -> {
- final Throwable exception = logEvent.getThrown();
- if (exception == null) {
- jsonWriter.writeNull();
- } else {
- final Throwable rootCause = Throwables.getRootCause(exception);
- stackTraceStringResolver.resolve(rootCause, jsonWriter);
- }
- };
- }
-
- @Override
- EventResolver createStackTraceObjectResolver(EventResolverContext context) {
- return (final LogEvent logEvent, final JsonWriter jsonWriter) -> {
- final Throwable exception = logEvent.getThrown();
- if (exception == null) {
- jsonWriter.writeNull();
- } else {
- final Throwable rootCause = Throwables.getRootCause(exception);
- context.getStackTraceObjectResolver().resolve(rootCause, jsonWriter);
- }
- };
- }
-
- };
-
- private final boolean stackTraceEnabled;
-
- private final EventResolver internalResolver;
+final class ExceptionRootCauseResolver extends ExceptionResolver {
ExceptionRootCauseResolver(
final EventResolverContext context,
final TemplateResolverConfig config) {
- this.stackTraceEnabled = context.isStackTraceEnabled();
- this.internalResolver = INTERNAL_RESOLVER_FACTORY
- .createInternalResolver(context, config);
+ super(context, config);
}
static String getName() {
@@ -109,20 +41,9 @@ final class ExceptionRootCauseResolver implements EventResolver {
}
@Override
- public boolean isResolvable() {
- return stackTraceEnabled;
- }
-
- @Override
- public boolean isResolvable(final LogEvent logEvent) {
- return stackTraceEnabled && logEvent.getThrown() != null;
- }
-
- @Override
- public void resolve(
- final LogEvent logEvent,
- final JsonWriter jsonWriter) {
- internalResolver.resolve(logEvent, jsonWriter);
+ Throwable extractThrowable(LogEvent logEvent) {
+ final Throwable thrown = logEvent.getThrown();
+ return thrown != null ? Throwables.getRootCause(thrown) : null;
}
}