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 <[email protected]> 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; } }
