From b52987ee26cfac3562b56811f484ad12a5d51045 Mon Sep 17 00:00:00 2001 From: Tobias Stadler Date: Fri, 18 Feb 2022 16:24:25 +0100 Subject: [PATCH 1/3] Added support for service.version --- docs/tab-widgets/ecs-encoder.asciidoc | 43 +++++++++++++++---- .../co/elastic/logging/EcsJsonSerializer.java | 8 ++++ .../logging/AbstractEcsLoggingTest.java | 1 + .../logging/EcsJsonSerializerTest.java | 3 ++ .../jboss/logmanager/EcsFormatter.java | 10 ++++- .../jboss/logmanager/JBossLogManagerTest.java | 1 + .../co/elastic/logging/jul/EcsFormatter.java | 7 +++ .../elastic/logging/jul/JulLoggingTest.java | 1 + .../co/elastic/logging/log4j/EcsLayout.java | 6 +++ .../logging/log4j/Log4jEcsLayoutTest.java | 1 + log4j-ecs-layout/src/test/resources/log4j.xml | 1 + .../co/elastic/logging/log4j2/EcsLayout.java | 18 +++++++- .../logging/log4j2/Log4j2EcsLayoutTest.java | 1 + .../src/test/resources/log4j2-test.xml | 2 +- .../elastic/logging/logback/EcsEncoder.java | 6 +++ .../logging/logback/EcsEncoderTest.java | 1 + .../EcsEncoderWithStacktraceAsArrayTest.java | 1 + ...ck-config-with-nop-throwable-converter.xml | 1 + .../src/test/resources/logback-config.xml | 1 + 19 files changed, 100 insertions(+), 13 deletions(-) diff --git a/docs/tab-widgets/ecs-encoder.asciidoc b/docs/tab-widgets/ecs-encoder.asciidoc index 8d538cfb..c934b1de 100644 --- a/docs/tab-widgets/ecs-encoder.asciidoc +++ b/docs/tab-widgets/ecs-encoder.asciidoc @@ -41,6 +41,7 @@ All you have to do is to use the `co.elastic.logging.logback.EcsEncoder` instead ---- my-application + my-application-version my-application-cluster-node ---- @@ -53,7 +54,12 @@ All you have to do is to use the `co.elastic.logging.logback.EcsEncoder` instead |`serviceName` |String | -|Sets the `service.name` field so you can filter your logs by a particular service +|Sets the `service.name` fieldso you can filter your logs by a particular service name + +|`serviceVersion` +|String +| +|Sets the `service.version` fieldso you can filter your logs by a particular service version |`serviceNodeName` |String @@ -110,10 +116,10 @@ For example: - + - + @@ -133,7 +139,12 @@ For example: |`serviceName` |String | -|Sets the `service.name` field so you can filter your logs by a particular service +|Sets the `service.name` field so you can filter your logs by a particular service name + +|`serviceVersion` +|String +| +|Sets the `service.version` field so you can filter your logs by a particular service version |`serviceNodeName` |String @@ -220,7 +231,12 @@ For example: |`serviceName` |String | -|Sets the `service.name` field so you can filter your logs by a particular service +|Sets the `service.name` field so you can filter your logs by a particular service name + +|`serviceVersion` +|String +| +|Sets the `service.version` field so you can filter your logs by a particular service version |`serviceNodeName` |String @@ -269,6 +285,7 @@ For example, in `$CATALINA_HOME/conf/logging.properties`: java.util.logging.ConsoleHandler.level = FINE java.util.logging.ConsoleHandler.formatter = co.elastic.logging.jul.EcsFormatter co.elastic.logging.jul.EcsFormatter.serviceName=my-app +co.elastic.logging.jul.EcsFormatter.serviceVersion=my-app-version co.elastic.logging.jul.EcsFormatter.serviceNodeName=my-app-cluster-node ---- @@ -280,7 +297,12 @@ co.elastic.logging.jul.EcsFormatter.serviceNodeName=my-app-cluster-node |`serviceName` |String | -|Sets the `service.name` field so you can filter your logs by a particular service +|Sets the `service.name` field so you can filter your logs by a particular service name + +|`serviceVersion` +|String +| +|Sets the `service.version` field so you can filter your logs by a particular service version |`serviceNodeName` |String @@ -328,7 +350,7 @@ Add the formatter to a handler in the logging subsystem: [source,bash] ---- $WILDFLY_HOME/bin/jboss-cli.sh -c '/subsystem=logging/custom-formatter=ECS:add(module=co.elastic.logging.jboss-logmanager-ecs-formatter, -class=co.elastic.logging.jboss.logmanager.EcsFormatter, properties={serviceName=my-app,serviceNodeName=my-app-cluster-node}),\ +class=co.elastic.logging.jboss.logmanager.EcsFormatter, properties={serviceName=my-app,serviceVersion=my-app-version,serviceNodeName=my-app-cluster-node}),\ /subsystem=logging/console-handler=CONSOLE:write-attribute(name=named-formatter,value=ECS)' ---- @@ -340,7 +362,12 @@ class=co.elastic.logging.jboss.logmanager.EcsFormatter, properties={serviceName= |`serviceName` |String | -|Sets the `service.name` field so you can filter your logs by a particular service +|Sets the `service.name` field so you can filter your logs by a particular service name + +|`serviceVersion` +|String +| +|Sets the `service.version` field so you can filter your logs by a particular service version |`serviceNodeName` |String diff --git a/ecs-logging-core/src/main/java/co/elastic/logging/EcsJsonSerializer.java b/ecs-logging-core/src/main/java/co/elastic/logging/EcsJsonSerializer.java index 3dbb5cf4..4e2c652d 100644 --- a/ecs-logging-core/src/main/java/co/elastic/logging/EcsJsonSerializer.java +++ b/ecs-logging-core/src/main/java/co/elastic/logging/EcsJsonSerializer.java @@ -94,6 +94,14 @@ public static void serializeServiceName(StringBuilder builder, String serviceNam } } + public static void serializeServiceVersion(StringBuilder builder, String serviceVersion) { + if (serviceVersion != null) { + builder.append("\"service.version\":\""); + JsonUtils.quoteAsString(serviceVersion, builder); + builder.append("\","); + } + } + public static void serializeServiceNodeName(StringBuilder builder, String serviceNodeName) { if (serviceNodeName != null) { builder.append("\"service.node.name\":\""); diff --git a/ecs-logging-core/src/test/java/co/elastic/logging/AbstractEcsLoggingTest.java b/ecs-logging-core/src/test/java/co/elastic/logging/AbstractEcsLoggingTest.java index 7cb10c91..16362b5e 100644 --- a/ecs-logging-core/src/test/java/co/elastic/logging/AbstractEcsLoggingTest.java +++ b/ecs-logging-core/src/test/java/co/elastic/logging/AbstractEcsLoggingTest.java @@ -57,6 +57,7 @@ void testMetadata() throws Exception { debug("test"); assertThat(getAndValidateLastLogLine().get("process.thread.name").textValue()).isEqualTo(Thread.currentThread().getName()); assertThat(getAndValidateLastLogLine().get("service.name").textValue()).isEqualTo("test"); + assertThat(getAndValidateLastLogLine().get("service.version").textValue()).isEqualTo("test-version"); assertThat(getAndValidateLastLogLine().get("service.node.name").textValue()).isEqualTo("test-node"); assertThat(Instant.parse(getAndValidateLastLogLine().get("@timestamp").textValue())).isCloseTo(Instant.now(), within(1, ChronoUnit.MINUTES)); assertThat(getAndValidateLastLogLine().get("log.level").textValue()).isIn("DEBUG", "FINE"); diff --git a/ecs-logging-core/src/test/java/co/elastic/logging/EcsJsonSerializerTest.java b/ecs-logging-core/src/test/java/co/elastic/logging/EcsJsonSerializerTest.java index 73f088d2..523716ee 100644 --- a/ecs-logging-core/src/test/java/co/elastic/logging/EcsJsonSerializerTest.java +++ b/ecs-logging-core/src/test/java/co/elastic/logging/EcsJsonSerializerTest.java @@ -65,6 +65,7 @@ void serializeExceptionAsString() throws IOException { void testEscaping() throws IOException { String loggerName = "logger\""; String serviceName = "test\""; + String serviceVersion = "test-version\""; String serviceNodeName = "test-node\""; String eventDataset = "event-dataset\""; String threadName = "event-dataset\""; @@ -75,6 +76,7 @@ void testEscaping() throws IOException { jsonBuilder.append('{'); EcsJsonSerializer.serializeLoggerName(jsonBuilder, loggerName); EcsJsonSerializer.serializeServiceName(jsonBuilder, serviceName); + EcsJsonSerializer.serializeServiceVersion(jsonBuilder, serviceVersion); EcsJsonSerializer.serializeServiceNodeName(jsonBuilder, serviceNodeName); EcsJsonSerializer.serializeEventDataset(jsonBuilder, eventDataset); EcsJsonSerializer.serializeThreadName(jsonBuilder, threadName); @@ -85,6 +87,7 @@ void testEscaping() throws IOException { assertThat(jsonNode.get("log.logger").textValue()).isEqualTo(loggerName); assertThat(jsonNode.get("service.name").textValue()).isEqualTo(serviceName); + assertThat(jsonNode.get("service.version").textValue()).isEqualTo(serviceVersion); assertThat(jsonNode.get("service.node.name").textValue()).isEqualTo(serviceNodeName); assertThat(jsonNode.get("event.dataset").textValue()).isEqualTo(eventDataset); assertThat(jsonNode.get("process.thread.name").textValue()).isEqualTo(eventDataset); diff --git a/jboss-logmanager-ecs-formatter/src/main/java/co/elastic/logging/jboss/logmanager/EcsFormatter.java b/jboss-logmanager-ecs-formatter/src/main/java/co/elastic/logging/jboss/logmanager/EcsFormatter.java index fbb1497a..99883cb8 100644 --- a/jboss-logmanager-ecs-formatter/src/main/java/co/elastic/logging/jboss/logmanager/EcsFormatter.java +++ b/jboss-logmanager-ecs-formatter/src/main/java/co/elastic/logging/jboss/logmanager/EcsFormatter.java @@ -24,19 +24,19 @@ */ package co.elastic.logging.jboss.logmanager; -import co.elastic.logging.EcsJsonSerializer; import co.elastic.logging.AdditionalField; +import co.elastic.logging.EcsJsonSerializer; import org.jboss.logmanager.ExtFormatter; import org.jboss.logmanager.ExtLogRecord; import org.jboss.logmanager.LogManager; -import java.util.ArrayList; import java.util.Collections; import java.util.List; public class EcsFormatter extends ExtFormatter { private String serviceName; + private String serviceVersion; private String serviceNodeName; private String eventDataset; private List additionalFields = Collections.emptyList(); @@ -45,6 +45,7 @@ public class EcsFormatter extends ExtFormatter { public EcsFormatter() { serviceName = getProperty("co.elastic.logging.jboss.logmanager.EcsFormatter.serviceName", null); + serviceVersion = getProperty("co.elastic.logging.jboss.logmanager.EcsFormatter.serviceversion", null); serviceNodeName = getProperty("co.elastic.logging.jboss.logmanager.EcsFormatter.serviceNodeName", null); eventDataset = getProperty("co.elastic.logging.jboss.logmanager.EcsFormatter.eventDataset", null); eventDataset = EcsJsonSerializer.computeEventDataset(eventDataset, serviceName); @@ -60,6 +61,7 @@ public String format(ExtLogRecord record) { EcsJsonSerializer.serializeFormattedMessage(builder, record.getFormattedMessage()); EcsJsonSerializer.serializeEcsVersion(builder); EcsJsonSerializer.serializeServiceName(builder, serviceName); + EcsJsonSerializer.serializeServiceVersion(builder, serviceVersion); EcsJsonSerializer.serializeServiceNodeName(builder, serviceNodeName); EcsJsonSerializer.serializeEventDataset(builder, eventDataset); EcsJsonSerializer.serializeThreadName(builder, record.getThreadName()); @@ -94,6 +96,10 @@ public void setServiceName(final String serviceName) { eventDataset = EcsJsonSerializer.computeEventDataset(eventDataset, serviceName); } + public void setServiceVersion(final String serviceVersion) { + this.serviceVersion = serviceVersion; + } + public void setServiceNodeName(final String serviceNodeName) { this.serviceNodeName = serviceNodeName; } diff --git a/jboss-logmanager-ecs-formatter/src/test/java/co/elastic/logging/jboss/logmanager/JBossLogManagerTest.java b/jboss-logmanager-ecs-formatter/src/test/java/co/elastic/logging/jboss/logmanager/JBossLogManagerTest.java index 22ed6255..a4584016 100644 --- a/jboss-logmanager-ecs-formatter/src/test/java/co/elastic/logging/jboss/logmanager/JBossLogManagerTest.java +++ b/jboss-logmanager-ecs-formatter/src/test/java/co/elastic/logging/jboss/logmanager/JBossLogManagerTest.java @@ -89,6 +89,7 @@ public JsonNode getLastLogLine() throws IOException { void setUp() { formatter.setIncludeOrigin(true); formatter.setServiceName("test"); + formatter.setServiceVersion("test-version"); formatter.setServiceNodeName("test-node"); formatter.setEventDataset("testdataset"); formatter.setAdditionalFields("key1=value1,key2=value2"); diff --git a/jul-ecs-formatter/src/main/java/co/elastic/logging/jul/EcsFormatter.java b/jul-ecs-formatter/src/main/java/co/elastic/logging/jul/EcsFormatter.java index 5a3df380..09990667 100644 --- a/jul-ecs-formatter/src/main/java/co/elastic/logging/jul/EcsFormatter.java +++ b/jul-ecs-formatter/src/main/java/co/elastic/logging/jul/EcsFormatter.java @@ -40,6 +40,7 @@ public class EcsFormatter extends Formatter { private boolean stackTraceAsArray; private String serviceName; + private String serviceVersion; private String serviceNodeName; private boolean includeOrigin; private String eventDataset; @@ -50,6 +51,7 @@ public class EcsFormatter extends Formatter { */ public EcsFormatter() { serviceName = getProperty("co.elastic.logging.jul.EcsFormatter.serviceName", null); + serviceVersion= getProperty("co.elastic.logging.jul.EcsFormatter.serviceVersion", null); serviceNodeName = getProperty("co.elastic.logging.jul.EcsFormatter.serviceNodeName", null); includeOrigin = Boolean.getBoolean(getProperty("co.elastic.logging.jul.EcsFormatter.includeOrigin", "false")); stackTraceAsArray = Boolean @@ -69,6 +71,7 @@ public String format(final LogRecord record) { EcsJsonSerializer.serializeAdditionalFields(builder, additionalFields); EcsJsonSerializer.serializeMDC(builder, mdcSupplier.getMDC()); EcsJsonSerializer.serializeServiceName(builder, serviceName); + EcsJsonSerializer.serializeServiceVersion(builder, serviceVersion); EcsJsonSerializer.serializeServiceNodeName(builder, serviceNodeName); EcsJsonSerializer.serializeEventDataset(builder, eventDataset); if (Thread.currentThread().getId() == record.getThreadID()) { @@ -96,6 +99,10 @@ protected void setServiceName(final String serviceName) { this.serviceName = serviceName; } + protected void setServiceVersion(final String serviceVersion) { + this.serviceVersion = serviceVersion; + } + protected void setServiceNodeName(final String serviceNodeName) { this.serviceNodeName = serviceNodeName; } diff --git a/jul-ecs-formatter/src/test/java/co/elastic/logging/jul/JulLoggingTest.java b/jul-ecs-formatter/src/test/java/co/elastic/logging/jul/JulLoggingTest.java index 76be1ab5..67b3f06d 100644 --- a/jul-ecs-formatter/src/test/java/co/elastic/logging/jul/JulLoggingTest.java +++ b/jul-ecs-formatter/src/test/java/co/elastic/logging/jul/JulLoggingTest.java @@ -112,6 +112,7 @@ void setUp() { formatter.setIncludeOrigin(true); formatter.setServiceName("test"); + formatter.setServiceVersion("test-version"); formatter.setServiceNodeName("test-node"); formatter.setEventDataset("testdataset"); formatter.setAdditionalFields("key1=value1,key2=value2"); diff --git a/log4j-ecs-layout/src/main/java/co/elastic/logging/log4j/EcsLayout.java b/log4j-ecs-layout/src/main/java/co/elastic/logging/log4j/EcsLayout.java index a97892fa..d8503048 100644 --- a/log4j-ecs-layout/src/main/java/co/elastic/logging/log4j/EcsLayout.java +++ b/log4j-ecs-layout/src/main/java/co/elastic/logging/log4j/EcsLayout.java @@ -40,6 +40,7 @@ public class EcsLayout extends Layout { private boolean stackTraceAsArray = false; private String serviceName; + private String serviceVersion; private String serviceNodeName; private boolean includeOrigin; private String eventDataset; @@ -53,6 +54,7 @@ public String format(LoggingEvent event) { EcsJsonSerializer.serializeFormattedMessage(builder, event.getRenderedMessage()); EcsJsonSerializer.serializeEcsVersion(builder); EcsJsonSerializer.serializeServiceName(builder, serviceName); + EcsJsonSerializer.serializeServiceVersion(builder, serviceVersion); EcsJsonSerializer.serializeServiceNodeName(builder, serviceNodeName); EcsJsonSerializer.serializeEventDataset(builder, eventDataset); EcsJsonSerializer.serializeThreadName(builder, event.getThreadName()); @@ -101,6 +103,10 @@ public void setServiceName(String serviceName) { this.serviceName = serviceName; } + public void setServiceVersion(String serviceVersion) { + this.serviceVersion = serviceVersion; + } + public void setServiceNodeName(String serviceNodeName) { this.serviceNodeName = serviceNodeName; } diff --git a/log4j-ecs-layout/src/test/java/co/elastic/logging/log4j/Log4jEcsLayoutTest.java b/log4j-ecs-layout/src/test/java/co/elastic/logging/log4j/Log4jEcsLayoutTest.java index 7ff39648..1ac395f0 100644 --- a/log4j-ecs-layout/src/test/java/co/elastic/logging/log4j/Log4jEcsLayoutTest.java +++ b/log4j-ecs-layout/src/test/java/co/elastic/logging/log4j/Log4jEcsLayoutTest.java @@ -51,6 +51,7 @@ void setUp() { logger.addAppender(appender); ecsLayout = new EcsLayout(); ecsLayout.setServiceName("test"); + ecsLayout.setServiceVersion("test-version"); ecsLayout.setServiceNodeName("test-node"); ecsLayout.setIncludeOrigin(true); ecsLayout.setEventDataset("testdataset"); diff --git a/log4j-ecs-layout/src/test/resources/log4j.xml b/log4j-ecs-layout/src/test/resources/log4j.xml index f532306c..53287289 100644 --- a/log4j-ecs-layout/src/test/resources/log4j.xml +++ b/log4j-ecs-layout/src/test/resources/log4j.xml @@ -4,6 +4,7 @@ + diff --git a/log4j2-ecs-layout/src/main/java/co/elastic/logging/log4j2/EcsLayout.java b/log4j2-ecs-layout/src/main/java/co/elastic/logging/log4j2/EcsLayout.java index 5c963d1a..4274d41d 100644 --- a/log4j2-ecs-layout/src/main/java/co/elastic/logging/log4j2/EcsLayout.java +++ b/log4j2-ecs-layout/src/main/java/co/elastic/logging/log4j2/EcsLayout.java @@ -71,16 +71,18 @@ public class EcsLayout extends AbstractStringLayout { private final PatternFormatter[][] fieldValuePatternFormatter; private final boolean stackTraceAsArray; private final String serviceName; + private final String serviceVersion; private final String serviceNodeName; private final String eventDataset; private final boolean includeMarkers; private final boolean includeOrigin; private final ConcurrentMap, Boolean> supportsJson = new ConcurrentHashMap, Boolean>(); - private EcsLayout(Configuration config, String serviceName, String serviceNodeName, String eventDataset, boolean includeMarkers, + private EcsLayout(Configuration config, String serviceName, String serviceVersion, String serviceNodeName, String eventDataset, boolean includeMarkers, KeyValuePair[] additionalFields, boolean includeOrigin, boolean stackTraceAsArray) { super(config, UTF_8, null, null); this.serviceName = serviceName; + this.serviceVersion = serviceVersion; this.serviceNodeName = serviceNodeName; this.eventDataset = eventDataset; this.includeMarkers = includeMarkers; @@ -131,6 +133,7 @@ private StringBuilder toText(LogEvent event, StringBuilder builder, boolean gcFr serializeMessage(builder, gcFree, event.getMessage(), event.getThrown()); EcsJsonSerializer.serializeEcsVersion(builder); EcsJsonSerializer.serializeServiceName(builder, serviceName); + EcsJsonSerializer.serializeServiceVersion(builder, serviceVersion); EcsJsonSerializer.serializeServiceNodeName(builder, serviceNodeName); EcsJsonSerializer.serializeEventDataset(builder, eventDataset); EcsJsonSerializer.serializeThreadName(builder, event.getThreadName()); @@ -331,6 +334,8 @@ public static class Builder implements org.apache.logging.log4j.core.util.Builde private Configuration configuration; @PluginBuilderAttribute("serviceName") private String serviceName; + @PluginBuilderAttribute("serviceVersion") + private String serviceVersion; @PluginBuilderAttribute("serviceNodeName") private String serviceNodeName; @PluginBuilderAttribute("eventDataset") @@ -364,6 +369,10 @@ public String getServiceName() { return serviceName; } + public String getServiceVersion() { + return serviceVersion; + } + public String getServiceNodeName() { return serviceNodeName; } @@ -395,6 +404,11 @@ public EcsLayout.Builder setServiceName(final String serviceName) { return this; } + public EcsLayout.Builder setServiceVersion(final String serviceVersion) { + this.serviceVersion = serviceVersion; + return this; + } + public EcsLayout.Builder setServiceNodeName(final String serviceNodeName) { this.serviceNodeName = serviceNodeName; return this; @@ -422,7 +436,7 @@ public EcsLayout.Builder setStackTraceAsArray(boolean stackTraceAsArray) { @Override public EcsLayout build() { - return new EcsLayout(getConfiguration(), serviceName, serviceNodeName, EcsJsonSerializer.computeEventDataset(eventDataset, serviceName), + return new EcsLayout(getConfiguration(), serviceName, serviceVersion, serviceNodeName, EcsJsonSerializer.computeEventDataset(eventDataset, serviceName), includeMarkers, additionalFields, includeOrigin, stackTraceAsArray); } diff --git a/log4j2-ecs-layout/src/test/java/co/elastic/logging/log4j2/Log4j2EcsLayoutTest.java b/log4j2-ecs-layout/src/test/java/co/elastic/logging/log4j2/Log4j2EcsLayoutTest.java index 2b2b09e5..08af4bd1 100644 --- a/log4j2-ecs-layout/src/test/java/co/elastic/logging/log4j2/Log4j2EcsLayoutTest.java +++ b/log4j2-ecs-layout/src/test/java/co/elastic/logging/log4j2/Log4j2EcsLayoutTest.java @@ -67,6 +67,7 @@ void setUp() { EcsLayout ecsLayout = EcsLayout.newBuilder() .setConfiguration(ctx.getConfiguration()) .setServiceName("test") + .setServiceVersion("test-version") .setServiceNodeName("test-node") .setIncludeMarkers(true) .setIncludeOrigin(true) diff --git a/log4j2-ecs-layout/src/test/resources/log4j2-test.xml b/log4j2-ecs-layout/src/test/resources/log4j2-test.xml index 967c0a32..48b33af8 100644 --- a/log4j2-ecs-layout/src/test/resources/log4j2-test.xml +++ b/log4j2-ecs-layout/src/test/resources/log4j2-test.xml @@ -5,7 +5,7 @@ - diff --git a/logback-ecs-encoder/src/main/java/co/elastic/logging/logback/EcsEncoder.java b/logback-ecs-encoder/src/main/java/co/elastic/logging/logback/EcsEncoder.java index a35b3061..fb98bd77 100644 --- a/logback-ecs-encoder/src/main/java/co/elastic/logging/logback/EcsEncoder.java +++ b/logback-ecs-encoder/src/main/java/co/elastic/logging/logback/EcsEncoder.java @@ -46,6 +46,7 @@ public class EcsEncoder extends EncoderBase { private static final Charset UTF_8 = Charset.forName("UTF-8"); private boolean stackTraceAsArray = false; private String serviceName; + private String serviceVersion; private String serviceNodeName; private String eventDataset; private boolean includeMarkers = false; @@ -107,6 +108,7 @@ public byte[] encode(ILoggingEvent event) { EcsJsonSerializer.serializeEcsVersion(builder); serializeMarkers(event, builder); EcsJsonSerializer.serializeServiceName(builder, serviceName); + EcsJsonSerializer.serializeServiceVersion(builder, serviceVersion); EcsJsonSerializer.serializeServiceNodeName(builder, serviceNodeName); EcsJsonSerializer.serializeEventDataset(builder, eventDataset); EcsJsonSerializer.serializeThreadName(builder, event.getThreadName()); @@ -171,6 +173,10 @@ public void setServiceName(String serviceName) { this.serviceName = serviceName; } + public void setServiceVersion(String serviceVersion) { + this.serviceVersion = serviceVersion; + } + public void setServiceNodeName(String serviceNodeName) { this.serviceNodeName = serviceNodeName; } diff --git a/logback-ecs-encoder/src/test/java/co/elastic/logging/logback/EcsEncoderTest.java b/logback-ecs-encoder/src/test/java/co/elastic/logging/logback/EcsEncoderTest.java index 6e0352ba..d5d8f244 100644 --- a/logback-ecs-encoder/src/test/java/co/elastic/logging/logback/EcsEncoderTest.java +++ b/logback-ecs-encoder/src/test/java/co/elastic/logging/logback/EcsEncoderTest.java @@ -44,6 +44,7 @@ void setUp() { logger.addAppender(appender); EcsEncoder ecsEncoder = new EcsEncoder(); ecsEncoder.setServiceName("test"); + ecsEncoder.setServiceVersion("test-version"); ecsEncoder.setServiceNodeName("test-node"); ecsEncoder.setIncludeMarkers(true); ecsEncoder.setIncludeOrigin(true); diff --git a/logback-ecs-encoder/src/test/java/co/elastic/logging/logback/EcsEncoderWithStacktraceAsArrayTest.java b/logback-ecs-encoder/src/test/java/co/elastic/logging/logback/EcsEncoderWithStacktraceAsArrayTest.java index 01c53cbb..cf20e784 100644 --- a/logback-ecs-encoder/src/test/java/co/elastic/logging/logback/EcsEncoderWithStacktraceAsArrayTest.java +++ b/logback-ecs-encoder/src/test/java/co/elastic/logging/logback/EcsEncoderWithStacktraceAsArrayTest.java @@ -47,6 +47,7 @@ void setUp() throws IOException { logger.addAppender(appender); EcsEncoder ecsEncoder = new EcsEncoder(); ecsEncoder.setServiceName("test"); + ecsEncoder.setServiceVersion("test-version"); ecsEncoder.setIncludeMarkers(true); ecsEncoder.setIncludeOrigin(true); ecsEncoder.addAdditionalField(new AdditionalField("key1", "value1")); diff --git a/logback-ecs-encoder/src/test/resources/logback-config-with-nop-throwable-converter.xml b/logback-ecs-encoder/src/test/resources/logback-config-with-nop-throwable-converter.xml index 96bb71b8..5005348d 100644 --- a/logback-ecs-encoder/src/test/resources/logback-config-with-nop-throwable-converter.xml +++ b/logback-ecs-encoder/src/test/resources/logback-config-with-nop-throwable-converter.xml @@ -4,6 +4,7 @@ test + test-version test-node true true diff --git a/logback-ecs-encoder/src/test/resources/logback-config.xml b/logback-ecs-encoder/src/test/resources/logback-config.xml index c906211b..a0e8cb70 100644 --- a/logback-ecs-encoder/src/test/resources/logback-config.xml +++ b/logback-ecs-encoder/src/test/resources/logback-config.xml @@ -3,6 +3,7 @@ test + test-version test-node true true From 8a253372b88f4c60feddbe1fbe35c33b7faaa2ec Mon Sep 17 00:00:00 2001 From: eyalkoren <41850454+eyalkoren@users.noreply.github.com> Date: Thu, 28 Apr 2022 07:24:07 +0300 Subject: [PATCH 2/3] Add license header --- .../CustomExceptionPatternConverter.java | 24 +++++++++++++++++++ .../EcsLayoutWithExceptionPatternTest.java | 24 +++++++++++++++++++ .../EcsLayoutWithStackTraceAsArrayTest.java | 24 +++++++++++++++++++ 3 files changed, 72 insertions(+) diff --git a/log4j2-ecs-layout/src/test/java/co/elastic/logging/log4j2/CustomExceptionPatternConverter.java b/log4j2-ecs-layout/src/test/java/co/elastic/logging/log4j2/CustomExceptionPatternConverter.java index 12be9222..7c291869 100644 --- a/log4j2-ecs-layout/src/test/java/co/elastic/logging/log4j2/CustomExceptionPatternConverter.java +++ b/log4j2-ecs-layout/src/test/java/co/elastic/logging/log4j2/CustomExceptionPatternConverter.java @@ -1,3 +1,27 @@ +/*- + * #%L + * Java ECS logging + * %% + * Copyright (C) 2019 - 2022 Elastic and contributors + * %% + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. 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. + * #L% + */ package co.elastic.logging.log4j2; import org.apache.logging.log4j.core.LogEvent; diff --git a/log4j2-ecs-layout/src/test/java/co/elastic/logging/log4j2/EcsLayoutWithExceptionPatternTest.java b/log4j2-ecs-layout/src/test/java/co/elastic/logging/log4j2/EcsLayoutWithExceptionPatternTest.java index 72650d28..4c3502b7 100644 --- a/log4j2-ecs-layout/src/test/java/co/elastic/logging/log4j2/EcsLayoutWithExceptionPatternTest.java +++ b/log4j2-ecs-layout/src/test/java/co/elastic/logging/log4j2/EcsLayoutWithExceptionPatternTest.java @@ -1,3 +1,27 @@ +/*- + * #%L + * Java ECS logging + * %% + * Copyright (C) 2019 - 2022 Elastic and contributors + * %% + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. 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. + * #L% + */ package co.elastic.logging.log4j2; import com.fasterxml.jackson.databind.JsonNode; diff --git a/log4j2-ecs-layout/src/test/java/co/elastic/logging/log4j2/EcsLayoutWithStackTraceAsArrayTest.java b/log4j2-ecs-layout/src/test/java/co/elastic/logging/log4j2/EcsLayoutWithStackTraceAsArrayTest.java index 38c9218b..8eb7f4e2 100644 --- a/log4j2-ecs-layout/src/test/java/co/elastic/logging/log4j2/EcsLayoutWithStackTraceAsArrayTest.java +++ b/log4j2-ecs-layout/src/test/java/co/elastic/logging/log4j2/EcsLayoutWithStackTraceAsArrayTest.java @@ -1,3 +1,27 @@ +/*- + * #%L + * Java ECS logging + * %% + * Copyright (C) 2019 - 2022 Elastic and contributors + * %% + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. 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. + * #L% + */ package co.elastic.logging.log4j2; import com.fasterxml.jackson.databind.JsonNode; From dacf03da39ac8f7b1ad1ef4af59116a7d3539055 Mon Sep 17 00:00:00 2001 From: eyalkoren <41850454+eyalkoren@users.noreply.github.com> Date: Thu, 28 Apr 2022 07:26:12 +0300 Subject: [PATCH 3/3] Fix typo --- docs/tab-widgets/ecs-encoder.asciidoc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/tab-widgets/ecs-encoder.asciidoc b/docs/tab-widgets/ecs-encoder.asciidoc index c934b1de..10132aad 100644 --- a/docs/tab-widgets/ecs-encoder.asciidoc +++ b/docs/tab-widgets/ecs-encoder.asciidoc @@ -54,12 +54,12 @@ All you have to do is to use the `co.elastic.logging.logback.EcsEncoder` instead |`serviceName` |String | -|Sets the `service.name` fieldso you can filter your logs by a particular service name +|Sets the `service.name` field so you can filter your logs by a particular service name |`serviceVersion` |String | -|Sets the `service.version` fieldso you can filter your logs by a particular service version +|Sets the `service.version` field so you can filter your logs by a particular service version |`serviceNodeName` |String