You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by rg...@apache.org on 2020/04/20 20:53:41 UTC
[logging-log4j2] 01/03: Support location info in GelfLayout
This is an automated email from the ASF dual-hosted git repository.
rgoers pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
commit 964dd4bbeb2b8d349623d3c073949c49c39cee64
Author: jiangtangbi <tb...@thoughtworks.com>
AuthorDate: Mon Apr 20 13:47:16 2020 +0800
Support location info in GelfLayout
---
.../logging/log4j/core/layout/GelfLayout.java | 6 ++
.../logging/log4j/core/layout/GelfLayoutTest.java | 102 +++++++++++++--------
2 files changed, 71 insertions(+), 37 deletions(-)
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/GelfLayout.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/GelfLayout.java
index 268ec6a..dca3ff8 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/GelfLayout.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/GelfLayout.java
@@ -50,6 +50,7 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
+import java.util.Objects;
import java.util.zip.DeflaterOutputStream;
import java.util.zip.GZIPOutputStream;
@@ -388,6 +389,11 @@ public final class GelfLayout extends AbstractStringLayout {
helper.encode(text, destination);
}
+ @Override
+ public boolean requiresLocation() {
+ return Objects.nonNull(layout) && layout.requiresLocation();
+ }
+
private byte[] compress(final byte[] bytes) {
try {
final ByteArrayOutputStream baos = new ByteArrayOutputStream(compressionThreshold / 8);
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/GelfLayoutTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/GelfLayoutTest.java
index 095bec6..15bdf39 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/GelfLayoutTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/GelfLayoutTest.java
@@ -20,7 +20,11 @@ import com.fasterxml.jackson.core.io.JsonStringEncoder;
import org.apache.commons.io.IOUtils;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.ThreadContext;
-import org.apache.logging.log4j.core.*;
+import org.apache.logging.log4j.core.Appender;
+import org.apache.logging.log4j.core.BasicConfigurationFactory;
+import org.apache.logging.log4j.core.LogEvent;
+import org.apache.logging.log4j.core.Logger;
+import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.core.config.ConfigurationFactory;
import org.apache.logging.log4j.core.layout.GelfLayout.CompressionType;
import org.apache.logging.log4j.core.lookup.JavaLookup;
@@ -45,9 +49,9 @@ import static net.javacrumbs.jsonunit.JsonAssert.assertJsonEquals;
import static org.junit.Assert.assertEquals;
public class GelfLayoutTest {
-
+
static ConfigurationFactory configFactory = new BasicConfigurationFactory();
-
+
private static final String HOSTNAME = "TheHost";
private static final String KEY1 = "Key1";
private static final String KEY2 = "Key2";
@@ -61,7 +65,7 @@ public class GelfLayoutTest {
private static final String VALUE1 = "Value1";
@Rule
- public final ThreadContextRule threadContextRule = new ThreadContextRule();
+ public final ThreadContextRule threadContextRule = new ThreadContextRule();
@AfterClass
public static void cleanupClass() {
@@ -86,17 +90,17 @@ public class GelfLayoutTest {
}
// set up appenders
final GelfLayout layout = GelfLayout.newBuilder()
- .setConfiguration(ctx.getConfiguration())
- .setHost(host)
- .setAdditionalFields(new KeyValuePair[] {
- new KeyValuePair(KEY1, VALUE1),
- new KeyValuePair(KEY2, "${java:runtime}"), })
- .setCompressionType(compressionType)
- .setCompressionThreshold(1024)
- .setIncludeStacktrace(includeStacktrace)
- .setIncludeThreadContext(includeThreadContext)
- .setIncludeNullDelimiter(includeNullDelimiter)
- .build();
+ .setConfiguration(ctx.getConfiguration())
+ .setHost(host)
+ .setAdditionalFields(new KeyValuePair[]{
+ new KeyValuePair(KEY1, VALUE1),
+ new KeyValuePair(KEY2, "${java:runtime}"),})
+ .setCompressionType(compressionType)
+ .setCompressionThreshold(1024)
+ .setIncludeStacktrace(includeStacktrace)
+ .setIncludeThreadContext(includeThreadContext)
+ .setIncludeNullDelimiter(includeNullDelimiter)
+ .build();
final ListAppender eventAppender = new ListAppender("Events", null, null, true, false);
final ListAppender rawAppender = new ListAppender("Raw", null, layout, true, true);
final ListAppender formattedAppender = new ListAppender("Formatted", null, layout, true, false);
@@ -159,11 +163,11 @@ public class GelfLayoutTest {
"\"_thread\": \"" + threadName + "\"," +
"\"_logger\": \"\"," +
"\"short_message\": \"" + LINE2 + "\"," +
- (includeThreadContext ?
- "\"_" + MDCKEY1 + "\": \"" + MDCVALUE1 + "\"," +
- "\"_" + MDCKEY2 + "\": \"" + MDCVALUE2 + "\","
- :
- "") +
+ (includeThreadContext ?
+ "\"_" + MDCKEY1 + "\": \"" + MDCVALUE1 + "\"," +
+ "\"_" + MDCKEY2 + "\": \"" + MDCVALUE2 + "\","
+ :
+ "") +
"\"_" + KEY1 + "\": \"" + VALUE1 + "\"," +
"\"_" + KEY2 + "\": \"" + javaLookup.getRuntime() + "\"" +
"}",
@@ -176,20 +180,20 @@ public class GelfLayoutTest {
InputStream inflaterStream;
InputStream inflaterStream2;
switch (compressionType) {
- case GZIP:
- inflaterStream = new GZIPInputStream(bais);
- inflaterStream2 = new GZIPInputStream(bais2);
- break;
- case ZLIB:
- inflaterStream = new InflaterInputStream(bais);
- inflaterStream2 = new InflaterInputStream(bais2);
- break;
- case OFF:
- inflaterStream = bais;
- inflaterStream2 = bais2;
- break;
- default:
- throw new IllegalStateException("Missing test case clause");
+ case GZIP:
+ inflaterStream = new GZIPInputStream(bais);
+ inflaterStream2 = new GZIPInputStream(bais2);
+ break;
+ case ZLIB:
+ inflaterStream = new InflaterInputStream(bais);
+ inflaterStream2 = new InflaterInputStream(bais2);
+ break;
+ case OFF:
+ inflaterStream = bais;
+ inflaterStream2 = bais2;
+ break;
+ default:
+ throw new IllegalStateException("Missing test case clause");
}
final byte[] uncompressed = IOUtils.toByteArray(inflaterStream);
final byte[] uncompressed2 = IOUtils.toByteArray(inflaterStream2);
@@ -209,9 +213,9 @@ public class GelfLayoutTest {
"\"full_message\": \"" + String.valueOf(JsonStringEncoder.getInstance().quoteAsString(
includeStacktrace ? GelfLayout.formatThrowable(exception).toString() : exception.toString())) + "\"," +
(includeThreadContext ?
- "\"_" + MDCKEY1 + "\": \"" + MDCVALUE1 + "\"," +
- "\"_" + MDCKEY2 + "\": \"" + MDCVALUE2 + "\","
- : "") +
+ "\"_" + MDCKEY1 + "\": \"" + MDCVALUE1 + "\"," +
+ "\"_" + MDCKEY2 + "\": \"" + MDCVALUE2 + "\","
+ : "") +
"\"_" + KEY1 + "\": \"" + VALUE1 + "\"," +
"\"_" + KEY2 + "\": \"" + javaLookup.getRuntime() + "\"" +
"}";
@@ -265,4 +269,28 @@ public class GelfLayoutTest {
assertEquals("1458741206.653", GelfLayout.formatTimestamp(1458741206653L).toString());
assertEquals("9223372036854775.807", GelfLayout.formatTimestamp(Long.MAX_VALUE).toString());
}
+
+ private void testRequiresLocation(String messagePattern, Boolean requiresLocation) {
+
+ GelfLayout layout = GelfLayout.newBuilder()
+ .setMessagePattern(messagePattern)
+ .build();
+
+ assertEquals(layout.requiresLocation(), requiresLocation);
+ }
+
+ @Test
+ public void testRequiresLocationPatternNotSet() {
+ testRequiresLocation(null, false);
+ }
+
+ @Test
+ public void testRequiresLocationPatternNotContainsLocation() {
+ testRequiresLocation("%m %n", false);
+ }
+
+ @Test
+ public void testRequiresLocationPatternContainsLocation() {
+ testRequiresLocation("%C %m %t", true);
+ }
}