diff --git a/docs/tab-widgets/ecs-encoder.asciidoc b/docs/tab-widgets/ecs-encoder.asciidoc
index 3d73e6e5..41a553b2 100644
--- a/docs/tab-widgets/ecs-encoder.asciidoc
+++ b/docs/tab-widgets/ecs-encoder.asciidoc
@@ -39,6 +39,7 @@ All you have to do is to use the `co.elastic.logging.logback.EcsEncoder` instead
----
my-application
+ my-application-cluster-node
----
@@ -52,6 +53,11 @@ All you have to do is to use the `co.elastic.logging.logback.EcsEncoder` instead
|
|Sets the `service.name` field so you can filter your logs by a particular service
+|`serviceNodeName`
+|String
+|
+|Sets the `service.node.name` field so you can filter your logs by a particular node of your clustered service
+
|`eventDataset`
|String
|`${serviceName}.log`
@@ -102,10 +108,10 @@ For example:
-
+
-
+
@@ -127,6 +133,11 @@ For example:
|
|Sets the `service.name` field so you can filter your logs by a particular service
+|`serviceNodeName`
+|String
+|
+|Sets the `service.node.name` field so you can filter your logs by a particular node of your clustered service
+
|`eventDataset`
|String
|`${serviceName}.log`
@@ -180,12 +191,14 @@ For example:
+
+
@@ -207,6 +220,11 @@ For example:
|
|Sets the `service.name` field so you can filter your logs by a particular service
+|`serviceNodeName`
+|String
+|
+|Sets the `service.node.name` field so you can filter your logs by a particular node of your clustered service
+
|`eventDataset`
|String
|`${serviceName}.log`
@@ -249,6 +267,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.serviceNodeName=my-app-cluster-node
----
**Layout Parameters**
@@ -261,6 +280,11 @@ co.elastic.logging.jul.EcsFormatter.serviceName=my-app
|
|Sets the `service.name` field so you can filter your logs by a particular service
+|`serviceNodeName`
+|String
+|
+|Sets the `service.node.name` field so you can filter your logs by a particular node of your clustered service
+
|`eventDataset`
|String
|`${serviceName}.log`
@@ -301,7 +325,8 @@ 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}),\
+$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}),\
/subsystem=logging/console-handler=CONSOLE:write-attribute(name=named-formatter,value=ECS)'
----
@@ -315,6 +340,11 @@ $WILDFLY_HOME/bin/jboss-cli.sh -c '/subsystem=logging/custom-formatter=ECS:add(m
|
|Sets the `service.name` field so you can filter your logs by a particular service
+|`serviceNodeName`
+|String
+|
+|Sets the `service.node.name` field so you can filter your logs by a particular node of your clustered service
+
|`eventDataset`
|String
|`${serviceName}.log`
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 6cf400aa..e026d471 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
@@ -87,13 +87,25 @@ public static void serializeFormattedMessage(StringBuilder builder, String messa
public static void serializeServiceName(StringBuilder builder, String serviceName) {
if (serviceName != null) {
- builder.append("\"service.name\":\"").append(serviceName).append("\",");
+ builder.append("\"service.name\":\"");
+ JsonUtils.quoteAsString(serviceName, builder);
+ builder.append("\",");
+ }
+ }
+
+ public static void serializeServiceNodeName(StringBuilder builder, String serviceNodeName) {
+ if (serviceNodeName != null) {
+ builder.append("\"service.node.name\":\"");
+ JsonUtils.quoteAsString(serviceNodeName, builder);
+ builder.append("\",");
}
}
public static void serializeEventDataset(StringBuilder builder, String eventDataset) {
if (eventDataset != null) {
- builder.append("\"event.dataset\":\"").append(eventDataset).append("\",");
+ builder.append("\"event.dataset\":\"");
+ JsonUtils.quoteAsString(eventDataset, builder);
+ builder.append("\",");
}
}
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 653c5073..3b910429 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.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");
assertThat(getAndValidateLastLogLine().get("log.logger")).isNotNull();
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 4ae7ab72..0a324a6c 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
@@ -32,6 +32,7 @@
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
+import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.StreamSupport;
@@ -55,6 +56,37 @@ void serializeExceptionAsString() throws IOException {
assertThat(jsonNode.get("error.stack_trace").textValue()).isEqualTo(stringWriter.toString());
}
+ @Test
+ void testEscaping() throws IOException {
+ String loggerName = "logger\"";
+ String serviceName = "test\"";
+ String serviceNodeName = "test-node\"";
+ String eventDataset = "event-dataset\"";
+ String threadName = "event-dataset\"";
+ String additionalKey = "key\"";
+ String additionalValue = "=value\"";
+
+ StringBuilder jsonBuilder = new StringBuilder();
+ jsonBuilder.append('{');
+ EcsJsonSerializer.serializeLoggerName(jsonBuilder, loggerName);
+ EcsJsonSerializer.serializeServiceName(jsonBuilder, serviceName);
+ EcsJsonSerializer.serializeServiceNodeName(jsonBuilder, serviceNodeName);
+ EcsJsonSerializer.serializeEventDataset(jsonBuilder, eventDataset);
+ EcsJsonSerializer.serializeThreadName(jsonBuilder, threadName);
+ EcsJsonSerializer.serializeAdditionalFields(jsonBuilder, List.of(new AdditionalField(additionalKey, additionalValue)));
+ EcsJsonSerializer.serializeObjectEnd(jsonBuilder);
+ jsonBuilder.append('}');
+ JsonNode jsonNode = new ObjectMapper().readTree(jsonBuilder.toString());
+
+ assertThat(jsonNode.get("log.logger").textValue()).isEqualTo(loggerName);
+ assertThat(jsonNode.get("service.name").textValue()).isEqualTo(serviceName);
+ 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);
+ assertThat(jsonNode.get("process.thread.name").textValue()).isEqualTo(eventDataset);
+ assertThat(jsonNode.get(additionalKey).textValue()).isEqualTo(additionalValue);
+ }
+
@Test
void serializeNullDoesNotThrowAnException() throws JsonProcessingException {
StringBuilder stringBuilder = new StringBuilder();
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 34f99e35..fbb1497a 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
@@ -37,6 +37,7 @@
public class EcsFormatter extends ExtFormatter {
private String serviceName;
+ private String serviceNodeName;
private String eventDataset;
private List additionalFields = Collections.emptyList();
private boolean includeOrigin;
@@ -44,6 +45,7 @@ public class EcsFormatter extends ExtFormatter {
public EcsFormatter() {
serviceName = getProperty("co.elastic.logging.jboss.logmanager.EcsFormatter.serviceName", 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);
includeOrigin = Boolean.getBoolean(getProperty("co.elastic.logging.jboss.logmanager.EcsFormatter.includeOrigin", "false"));
@@ -58,6 +60,7 @@ public String format(ExtLogRecord record) {
EcsJsonSerializer.serializeFormattedMessage(builder, record.getFormattedMessage());
EcsJsonSerializer.serializeEcsVersion(builder);
EcsJsonSerializer.serializeServiceName(builder, serviceName);
+ EcsJsonSerializer.serializeServiceNodeName(builder, serviceNodeName);
EcsJsonSerializer.serializeEventDataset(builder, eventDataset);
EcsJsonSerializer.serializeThreadName(builder, record.getThreadName());
EcsJsonSerializer.serializeLoggerName(builder, record.getLoggerName());
@@ -91,6 +94,10 @@ public void setServiceName(final String serviceName) {
eventDataset = EcsJsonSerializer.computeEventDataset(eventDataset, serviceName);
}
+ public void setServiceNodeName(final String serviceNodeName) {
+ this.serviceNodeName = serviceNodeName;
+ }
+
public void setStackTraceAsArray(final boolean stackTraceAsArray) {
this.stackTraceAsArray = stackTraceAsArray;
}
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 0350fc17..f6657fc9 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.setServiceNodeName("test-node");
formatter.setEventDataset("testdataset.log");
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 5362d74d..5a3df380 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 serviceNodeName;
private boolean includeOrigin;
private String eventDataset;
private List additionalFields = Collections.emptyList();
@@ -49,6 +50,7 @@ public class EcsFormatter extends Formatter {
*/
public EcsFormatter() {
serviceName = getProperty("co.elastic.logging.jul.EcsFormatter.serviceName", null);
+ serviceNodeName = getProperty("co.elastic.logging.jul.EcsFormatter.serviceNodeName", null);
includeOrigin = Boolean.getBoolean(getProperty("co.elastic.logging.jul.EcsFormatter.includeOrigin", "false"));
stackTraceAsArray = Boolean
.getBoolean(getProperty("co.elastic.logging.jul.EcsFormatter.stackTraceAsArray", "false"));
@@ -67,6 +69,7 @@ public String format(final LogRecord record) {
EcsJsonSerializer.serializeAdditionalFields(builder, additionalFields);
EcsJsonSerializer.serializeMDC(builder, mdcSupplier.getMDC());
EcsJsonSerializer.serializeServiceName(builder, serviceName);
+ EcsJsonSerializer.serializeServiceNodeName(builder, serviceNodeName);
EcsJsonSerializer.serializeEventDataset(builder, eventDataset);
if (Thread.currentThread().getId() == record.getThreadID()) {
EcsJsonSerializer.serializeThreadName(builder, Thread.currentThread().getName());
@@ -93,6 +96,10 @@ protected void setServiceName(final String serviceName) {
this.serviceName = serviceName;
}
+ protected void setServiceNodeName(final String serviceNodeName) {
+ this.serviceNodeName = serviceNodeName;
+ }
+
protected void setStackTraceAsArray(final boolean stackTraceAsArray) {
this.stackTraceAsArray = stackTraceAsArray;
}
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 37887492..61d7c3de 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.setServiceNodeName("test-node");
formatter.setEventDataset("testdataset.log");
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 6be4cb41..a97892fa 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 serviceNodeName;
private boolean includeOrigin;
private String eventDataset;
private List additionalFields = new ArrayList();
@@ -52,6 +53,7 @@ public String format(LoggingEvent event) {
EcsJsonSerializer.serializeFormattedMessage(builder, event.getRenderedMessage());
EcsJsonSerializer.serializeEcsVersion(builder);
EcsJsonSerializer.serializeServiceName(builder, serviceName);
+ EcsJsonSerializer.serializeServiceNodeName(builder, serviceNodeName);
EcsJsonSerializer.serializeEventDataset(builder, eventDataset);
EcsJsonSerializer.serializeThreadName(builder, event.getThreadName());
EcsJsonSerializer.serializeLoggerName(builder, event.categoryName);
@@ -99,6 +101,10 @@ public void setServiceName(String serviceName) {
this.serviceName = serviceName;
}
+ public void setServiceNodeName(String serviceNodeName) {
+ this.serviceNodeName = serviceNodeName;
+ }
+
public void setIncludeOrigin(boolean includeOrigin) {
this.includeOrigin = includeOrigin;
}
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 0796c5bd..43e7ce2e 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.setServiceNodeName("test-node");
ecsLayout.setIncludeOrigin(true);
ecsLayout.setEventDataset("testdataset.log");
ecsLayout.activateOptions();
diff --git a/log4j-ecs-layout/src/test/resources/log4j.xml b/log4j-ecs-layout/src/test/resources/log4j.xml
index b91729e4..567e90a6 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 36362554..647e3f0d 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
@@ -68,14 +68,17 @@ public class EcsLayout extends AbstractStringLayout {
private final PatternFormatter[][] fieldValuePatternFormatter;
private final boolean stackTraceAsArray;
private final String serviceName;
+ 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 eventDataset, boolean includeMarkers, KeyValuePair[] additionalFields, boolean includeOrigin, boolean stackTraceAsArray) {
+ private EcsLayout(Configuration config, String serviceName, String serviceNodeName, String eventDataset, boolean includeMarkers,
+ KeyValuePair[] additionalFields, boolean includeOrigin, boolean stackTraceAsArray) {
super(config, UTF_8, null, null);
this.serviceName = serviceName;
+ this.serviceNodeName = serviceNodeName;
this.eventDataset = eventDataset;
this.includeMarkers = includeMarkers;
this.includeOrigin = includeOrigin;
@@ -125,6 +128,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.serializeServiceNodeName(builder, serviceNodeName);
EcsJsonSerializer.serializeEventDataset(builder, eventDataset);
EcsJsonSerializer.serializeThreadName(builder, event.getThreadName());
EcsJsonSerializer.serializeLoggerName(builder, event.getLoggerName());
@@ -324,6 +328,8 @@ public static class Builder implements org.apache.logging.log4j.core.util.Builde
private Configuration configuration;
@PluginBuilderAttribute("serviceName")
private String serviceName;
+ @PluginBuilderAttribute("serviceNodeName")
+ private String serviceNodeName;
@PluginBuilderAttribute("eventDataset")
private String eventDataset;
@PluginBuilderAttribute("includeMarkers")
@@ -355,6 +361,10 @@ public String getServiceName() {
return serviceName;
}
+ public String getServiceNodeName() {
+ return serviceNodeName;
+ }
+
public String getEventDataset() {
return eventDataset;
}
@@ -382,6 +392,11 @@ public EcsLayout.Builder setServiceName(final String serviceName) {
return this;
}
+ public EcsLayout.Builder setServiceNodeName(final String serviceNodeName) {
+ this.serviceNodeName = serviceNodeName;
+ return this;
+ }
+
public EcsLayout.Builder setEventDataset(String eventDataset) {
this.eventDataset = eventDataset;
return this;
@@ -404,7 +419,8 @@ public EcsLayout.Builder setStackTraceAsArray(boolean stackTraceAsArray) {
@Override
public EcsLayout build() {
- return new EcsLayout(getConfiguration(), serviceName, EcsJsonSerializer.computeEventDataset(eventDataset, serviceName), includeMarkers, additionalFields, includeOrigin, stackTraceAsArray);
+ return new EcsLayout(getConfiguration(), serviceName, serviceNodeName, EcsJsonSerializer.computeEventDataset(eventDataset, serviceName),
+ includeMarkers, additionalFields, includeOrigin, stackTraceAsArray);
}
public boolean isStackTraceAsArray() {
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 c48d9d60..66e13b24 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")
+ .setServiceNodeName("test-node")
.setIncludeMarkers(true)
.setIncludeOrigin(true)
.setEventDataset("testdataset.log")
diff --git a/log4j2-ecs-layout/src/test/resources/log4j2-test.xml b/log4j2-ecs-layout/src/test/resources/log4j2-test.xml
index 35d2b53a..81df420c 100644
--- a/log4j2-ecs-layout/src/test/resources/log4j2-test.xml
+++ b/log4j2-ecs-layout/src/test/resources/log4j2-test.xml
@@ -5,7 +5,8 @@
-
+
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 530d2820..aa6da1c6 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
@@ -45,6 +45,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 serviceNodeName;
private String eventDataset;
private boolean includeMarkers = false;
private ThrowableProxyConverter throwableProxyConverter;
@@ -101,6 +102,7 @@ public byte[] encode(ILoggingEvent event) {
EcsJsonSerializer.serializeEcsVersion(builder);
serializeMarkers(event, builder);
EcsJsonSerializer.serializeServiceName(builder, serviceName);
+ EcsJsonSerializer.serializeServiceNodeName(builder, serviceNodeName);
EcsJsonSerializer.serializeEventDataset(builder, eventDataset);
EcsJsonSerializer.serializeThreadName(builder, event.getThreadName());
EcsJsonSerializer.serializeLoggerName(builder, event.getLoggerName());
@@ -151,6 +153,10 @@ public void setServiceName(String serviceName) {
this.serviceName = serviceName;
}
+ public void setServiceNodeName(String serviceNodeName) {
+ this.serviceNodeName = serviceNodeName;
+ }
+
public void setIncludeMarkers(boolean includeMarkers) {
this.includeMarkers = includeMarkers;
}
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 e8f915ae..a01a7237 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.setServiceNodeName("test-node");
ecsEncoder.setIncludeMarkers(true);
ecsEncoder.setIncludeOrigin(true);
ecsEncoder.addAdditionalField(new AdditionalField("key1", "value1"));
diff --git a/logback-ecs-encoder/src/test/resources/logback-config.xml b/logback-ecs-encoder/src/test/resources/logback-config.xml
index bdb6f2ba..d3e6c810 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-node
true
true
top_level