This is an automated email from the ASF dual-hosted git repository. vy pushed a commit to branch release-2.x in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
The following commit(s) were added to refs/heads/release-2.x by this push: new 1c340db Align JSON template layout code base with master. 1c340db is described below commit 1c340db374e6cc5627582469bcdb2d0cf3352136 Author: Volkan Yazici <volkan.yaz...@gmail.com> AuthorDate: Thu Nov 19 15:26:21 2020 +0100 Align JSON template layout code base with master. --- log4j-layout-template-json/pom.xml | 51 +++--- .../template/json/JsonTemplateLayoutDefaults.java | 178 ++++++--------------- .../template/json/resolver/ExceptionResolver.java | 2 +- .../template/json/resolver/TemplateResolver.java | 27 ++++ .../layout/template/json/util/JsonWriterTest.java | 2 - 5 files changed, 109 insertions(+), 151 deletions(-) diff --git a/log4j-layout-template-json/pom.xml b/log4j-layout-template-json/pom.xml index e9a46a3..a2fce5f 100644 --- a/log4j-layout-template-json/pom.xml +++ b/log4j-layout-template-json/pom.xml @@ -383,18 +383,19 @@ <arg>1</arg> <arg>-e</arg> <arg> + <![CDATA[ input { gelf { - host => "logstash" - use_tcp => true - use_udp => false - port => 12222 - type => "gelf" + host => "logstash" + use_tcp => true + use_udp => false + port => 12222 + type => "gelf" } tcp { - port => 12345 - codec => json - type => "tcp" + port => 12345 + codec => json + type => "tcp" } } @@ -403,17 +404,17 @@ # These are GELF/Syslog logging levels as defined in RFC 3164. # Map the integer level to its human readable format. translate { - field => "[level]" - destination => "[levelName]" - dictionary => { - "0" => "EMERG" - "1" => "ALERT" - "2" => "CRITICAL" - "3" => "ERROR" - "4" => "WARN" - "5" => "NOTICE" - "6" => "INFO" - "7" => "DEBUG" + field => "[level]" + destination => "[levelName]" + dictionary => { + "0" => "EMERG" + "1" => "ALERT" + "2" => "CRITICAL" + "3" => "ERROR" + "4" => "WARN" + "5" => "NOTICE" + "6" => "INFO" + "7" => "DEBUG" } } } @@ -421,12 +422,13 @@ output { # (Un)comment for debugging purposes - # stdout { codec => rubydebug } + # stdout { codec => rubydebug } elasticsearch { - hosts => ["http://elasticsearch:9200"] - index => "log4j" + hosts => ["http://elasticsearch:9200"] + index => "log4j" } } + ]]> </arg> </exec> </entrypoint> @@ -501,6 +503,11 @@ </plugin> <plugin> + <groupId>com.github.spotbugs</groupId> + <artifactId>spotbugs-maven-plugin</artifactId> + </plugin> + + <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jxr-plugin</artifactId> <version>${jxr.plugin.version}</version> diff --git a/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/JsonTemplateLayoutDefaults.java b/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/JsonTemplateLayoutDefaults.java index 9896c1e..4f417ee 100644 --- a/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/JsonTemplateLayoutDefaults.java +++ b/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/JsonTemplateLayoutDefaults.java @@ -29,71 +29,7 @@ public enum JsonTemplateLayoutDefaults {; private static final PropertiesUtil PROPERTIES = PropertiesUtil.getProperties(); - private static final Charset CHARSET = readCharset(); - - private static final boolean LOCATION_INFO_ENABLED = - PROPERTIES.getBooleanProperty( - "log4j.layout.jsonTemplate.locationInfoEnabled", - false); - - private static final boolean STACK_TRACE_ENABLED = - PROPERTIES.getBooleanProperty( - "log4j.layout.jsonTemplate.stackTraceEnabled", - true); - - private static final String TIMESTAMP_FORMAT_PATTERN = - PROPERTIES.getStringProperty( - "log4j.layout.jsonTemplate.timestampFormatPattern", - "yyyy-MM-dd'T'HH:mm:ss.SSSZZZ"); - - private static final TimeZone TIME_ZONE = readTimeZone(); - - private static final Locale LOCALE = readLocale(); - - private static final String EVENT_TEMPLATE = - PROPERTIES.getStringProperty( - "log4j.layout.jsonTemplate.eventTemplate"); - - private static final String EVENT_TEMPLATE_URI = - PROPERTIES.getStringProperty( - "log4j.layout.jsonTemplate.eventTemplateUri", - "classpath:EcsLayout.json"); - - private static final String STACK_TRACE_ELEMENT_TEMPLATE = - PROPERTIES.getStringProperty( - "log4j.layout.jsonTemplate.stackTraceElementTemplate"); - - private static final String STACK_TRACE_ELEMENT_TEMPLATE_URI = - PROPERTIES.getStringProperty( - "log4j.layout.jsonTemplate.stackTraceElementTemplateUri", - "classpath:StackTraceElementLayout.json"); - - private static final String MDC_KEY_PATTERN = - PROPERTIES.getStringProperty("log4j.layout.jsonTemplate.mdcKeyPattern"); - - private static final String NDC_PATTERN = - PROPERTIES.getStringProperty("log4j.layout.jsonTemplate.ndcPattern"); - - private static final String EVENT_DELIMITER = - PROPERTIES.getStringProperty( - "log4j.layout.jsonTemplate.eventDelimiter", - System.lineSeparator()); - - private static final boolean NULL_EVENT_DELIMITER_ENABLED = - PROPERTIES.getBooleanProperty( - "log4j.layout.jsonTemplate.nullEventDelimiterEnabled", - false); - - private static final int MAX_STRING_LENGTH = readMaxStringLength(); - - private static final String TRUNCATED_STRING_SUFFIX = - PROPERTIES.getStringProperty( - "log4j.layout.jsonTemplate.truncatedStringSuffix", - "…"); - - private static final RecyclerFactory RECYCLER_FACTORY = readRecyclerFactory(); - - private static Charset readCharset() { + public static Charset getCharset() { final String charsetName = PROPERTIES.getStringProperty("log4j.layout.jsonTemplate.charset"); return charsetName != null @@ -101,7 +37,25 @@ public enum JsonTemplateLayoutDefaults {; : StandardCharsets.UTF_8; } - private static TimeZone readTimeZone() { + public static boolean isLocationInfoEnabled() { + return PROPERTIES.getBooleanProperty( + "log4j.layout.jsonTemplate.locationInfoEnabled", + false); + } + + public static boolean isStackTraceEnabled() { + return PROPERTIES.getBooleanProperty( + "log4j.layout.jsonTemplate.stackTraceEnabled", + true); + } + + public static String getTimestampFormatPattern() { + return PROPERTIES.getStringProperty( + "log4j.layout.jsonTemplate.timestampFormatPattern", + "yyyy-MM-dd'T'HH:mm:ss.SSSZZZ"); + } + + public static TimeZone getTimeZone() { final String timeZoneId = PROPERTIES.getStringProperty("log4j.layout.jsonTemplate.timeZone"); return timeZoneId != null @@ -109,7 +63,7 @@ public enum JsonTemplateLayoutDefaults {; : TimeZone.getDefault(); } - private static Locale readLocale() { + public static Locale getLocale() { final String locale = PROPERTIES.getStringProperty("log4j.layout.jsonTemplate.locale"); if (locale == null) { @@ -124,90 +78,62 @@ public enum JsonTemplateLayoutDefaults {; } } - private static int readMaxStringLength() { - final int maxStringLength = PROPERTIES.getIntegerProperty( - "log4j.layout.jsonTemplate.maxStringLength", - 16 * 1_024); - if (maxStringLength <= 0) { - throw new IllegalArgumentException( - "was expecting a non-zero positive maxStringLength: " + - maxStringLength); - } - return maxStringLength; - } - - private static RecyclerFactory readRecyclerFactory() { - final String recyclerFactorySpec = PROPERTIES.getStringProperty( - "log4j.layout.jsonTemplate.recyclerFactory"); - return RecyclerFactories.ofSpec(recyclerFactorySpec); - } - - public static Charset getCharset() { - return CHARSET; - } - - public static boolean isLocationInfoEnabled() { - return LOCATION_INFO_ENABLED; - } - - public static boolean isStackTraceEnabled() { - return STACK_TRACE_ENABLED; - } - - public static String getTimestampFormatPattern() { - return TIMESTAMP_FORMAT_PATTERN; - } - - public static TimeZone getTimeZone() { - return TIME_ZONE; - } - - public static Locale getLocale() { - return LOCALE; - } - public static String getEventTemplate() { - return EVENT_TEMPLATE; + return PROPERTIES.getStringProperty( + "log4j.layout.jsonTemplate.eventTemplate"); } public static String getEventTemplateUri() { - return EVENT_TEMPLATE_URI; + return PROPERTIES.getStringProperty( + "log4j.layout.jsonTemplate.eventTemplateUri", + "classpath:EcsLayout.json"); } public static String getStackTraceElementTemplate() { - return STACK_TRACE_ELEMENT_TEMPLATE; + return PROPERTIES.getStringProperty( + "log4j.layout.jsonTemplate.stackTraceElementTemplate"); } public static String getStackTraceElementTemplateUri() { - return STACK_TRACE_ELEMENT_TEMPLATE_URI; - } - - public static String getMdcKeyPattern() { - return MDC_KEY_PATTERN; - } - - public static String getNdcPattern() { - return NDC_PATTERN; + return PROPERTIES.getStringProperty( + "log4j.layout.jsonTemplate.stackTraceElementTemplateUri", + "classpath:StackTraceElementLayout.json"); } public static String getEventDelimiter() { - return EVENT_DELIMITER; + return PROPERTIES.getStringProperty( + "log4j.layout.jsonTemplate.eventDelimiter", + System.lineSeparator()); } public static boolean isNullEventDelimiterEnabled() { - return NULL_EVENT_DELIMITER_ENABLED; + return PROPERTIES.getBooleanProperty( + "log4j.layout.jsonTemplate.nullEventDelimiterEnabled", + false); } public static int getMaxStringLength() { - return MAX_STRING_LENGTH; + final int maxStringLength = PROPERTIES.getIntegerProperty( + "log4j.layout.jsonTemplate.maxStringLength", + 16 * 1_024); + if (maxStringLength <= 0) { + throw new IllegalArgumentException( + "was expecting a non-zero positive maxStringLength: " + + maxStringLength); + } + return maxStringLength; } public static String getTruncatedStringSuffix() { - return TRUNCATED_STRING_SUFFIX; + return PROPERTIES.getStringProperty( + "log4j.layout.jsonTemplate.truncatedStringSuffix", + "…"); } public static RecyclerFactory getRecyclerFactory() { - return RECYCLER_FACTORY; + final String recyclerFactorySpec = PROPERTIES.getStringProperty( + "log4j.layout.jsonTemplate.recyclerFactory"); + return RecyclerFactories.ofSpec(recyclerFactorySpec); } } 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 4cd9b62..415104a 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 @@ -22,7 +22,7 @@ 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)}. * diff --git a/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/resolver/TemplateResolver.java b/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/resolver/TemplateResolver.java index 5db3813..62ce41d 100644 --- a/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/resolver/TemplateResolver.java +++ b/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/resolver/TemplateResolver.java @@ -21,20 +21,47 @@ import org.apache.logging.log4j.layout.template.json.util.JsonWriter; @FunctionalInterface public interface TemplateResolver<V> { + /** + * Indicates if the resolution should be appended to the parent JSON object. + * <p> + * For instance, {@link ThreadContextDataResolver}, i.e., MDC resolver, + * uses this flag to indicate whether the contents should be appended to the + * parent JSON object or not. + */ default boolean isFlattening() { return false; } + /** + * Indicates if the resolver if applicable at all. + * <p> + * For instance, the source line resolver can be short-circuited using this + * check if the location information is disabled in the layout configuration. + */ default boolean isResolvable() { return true; } + /** + * Indicates if the resolver if applicable for the given {@code value}. + * <p> + * For instance, the stack trace resolver can be short-circuited using this + * check if the stack traces are disabled in the layout configuration. + */ default boolean isResolvable(V value) { return true; } + /** + * Resolves the given {@code value} using the provided {@link JsonWriter}. + */ void resolve(V value, JsonWriter jsonWriter); + /** + * Resolves the given {@code value} using the provided {@link JsonWriter}. + * + * @param succeedingEntry false, if this is the first element in a collection; true, otherwise + */ default void resolve(V value, JsonWriter jsonWriter, boolean succeedingEntry) { resolve(value, jsonWriter); } diff --git a/log4j-layout-template-json/src/test/java/org/apache/logging/log4j/layout/template/json/util/JsonWriterTest.java b/log4j-layout-template-json/src/test/java/org/apache/logging/log4j/layout/template/json/util/JsonWriterTest.java index 68fe638..def4d42 100644 --- a/log4j-layout-template-json/src/test/java/org/apache/logging/log4j/layout/template/json/util/JsonWriterTest.java +++ b/log4j-layout-template-json/src/test/java/org/apache/logging/log4j/layout/template/json/util/JsonWriterTest.java @@ -375,7 +375,6 @@ public class JsonWriterTest { @Test public void test_writeString_formattable() { final String expectedJson = "\"foo\\tbar\\tbuzz\""; - @SuppressWarnings("Convert2Lambda") final String actualJson = WRITER.use(() -> WRITER.writeString(stringBuilder -> stringBuilder.append("foo\tbar\tbuzz"))); Assertions.assertThat(actualJson).isEqualTo(expectedJson); @@ -389,7 +388,6 @@ public class JsonWriterTest { excessiveString.substring(0, maxStringLength) + WRITER.getTruncatedStringSuffix() + '"'; - @SuppressWarnings("Convert2Lambda") final String actualJson = WRITER.use(() -> WRITER.writeString(stringBuilder -> stringBuilder.append(excessiveString))); Assertions.assertThat(actualJson).isEqualTo(expectedJson);