Skip to content

Commit 9062b71

Browse files
authored
Add support for service.environment (#184)
1 parent b09574f commit 9062b71

File tree

21 files changed

+98
-10
lines changed

21 files changed

+98
-10
lines changed

docs/tab-widgets/ecs-encoder.asciidoc

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ All you have to do is to use the `co.elastic.logging.logback.EcsEncoder` instead
4242
<encoder class="co.elastic.logging.logback.EcsEncoder">
4343
<serviceName>my-application</serviceName>
4444
<serviceVersion>my-application-version</serviceVersion>
45+
<serviceEnvironment>my-application-environment</serviceEnvironment>
4546
<serviceNodeName>my-application-cluster-node</serviceNodeName>
4647
</encoder>
4748
----
@@ -61,6 +62,11 @@ All you have to do is to use the `co.elastic.logging.logback.EcsEncoder` instead
6162
|
6263
|Sets the `service.version` field so you can filter your logs by a particular service version
6364

65+
|`serviceEnvironment`
66+
|String
67+
|
68+
|Sets the `service.environment` field so you can filter your logs by a particular service environment
69+
6470
|`serviceNodeName`
6571
|String
6672
|
@@ -116,10 +122,10 @@ For example:
116122
<Configuration status="DEBUG">
117123
<Appenders>
118124
<Console name="LogToConsole" target="SYSTEM_OUT">
119-
<EcsLayout serviceName="my-app" serviceVersion="my-app-version" serviceNodeName="my-app-cluster-node"/>
125+
<EcsLayout serviceName="my-app" serviceVersion="my-app-version" serviceEnvironment="my-app-environment" serviceNodeName="my-app-cluster-node"/>
120126
</Console>
121127
<File name="LogToFile" fileName="logs/app.log">
122-
<EcsLayout serviceName="my-app" serviceVersion="my-app-version" serviceNodeName="my-app-cluster-node"/>
128+
<EcsLayout serviceName="my-app" serviceVersion="my-app-version" serviceEnvironment="my-app-environment" serviceNodeName="my-app-cluster-node"/>
123129
</File>
124130
</Appenders>
125131
<Loggers>
@@ -146,6 +152,11 @@ For example:
146152
|
147153
|Sets the `service.version` field so you can filter your logs by a particular service version
148154

155+
|`serviceEnvironment`
156+
|String
157+
|
158+
|Sets the `service.environment` field so you can filter your logs by a particular service environment
159+
149160
|`serviceNodeName`
150161
|String
151162
|
@@ -238,6 +249,11 @@ For example:
238249
|
239250
|Sets the `service.version` field so you can filter your logs by a particular service version
240251

252+
|`serviceEnvironment`
253+
|String
254+
|
255+
|Sets the `service.environment` field so you can filter your logs by a particular service environment
256+
241257
|`serviceNodeName`
242258
|String
243259
|
@@ -286,6 +302,7 @@ java.util.logging.ConsoleHandler.level = FINE
286302
java.util.logging.ConsoleHandler.formatter = co.elastic.logging.jul.EcsFormatter
287303
co.elastic.logging.jul.EcsFormatter.serviceName=my-app
288304
co.elastic.logging.jul.EcsFormatter.serviceVersion=my-app-version
305+
co.elastic.logging.jul.EcsFormatter.serviceEnvironment=my-app-environment
289306
co.elastic.logging.jul.EcsFormatter.serviceNodeName=my-app-cluster-node
290307
----
291308

@@ -304,6 +321,11 @@ co.elastic.logging.jul.EcsFormatter.serviceNodeName=my-app-cluster-node
304321
|
305322
|Sets the `service.version` field so you can filter your logs by a particular service version
306323

324+
|`serviceEnvironment`
325+
|String
326+
|
327+
|Sets the `service.environment` field so you can filter your logs by a particular service environment
328+
307329
|`serviceNodeName`
308330
|String
309331
|
@@ -350,7 +372,7 @@ Add the formatter to a handler in the logging subsystem:
350372
[source,bash]
351373
----
352374
$WILDFLY_HOME/bin/jboss-cli.sh -c '/subsystem=logging/custom-formatter=ECS:add(module=co.elastic.logging.jboss-logmanager-ecs-formatter,
353-
class=co.elastic.logging.jboss.logmanager.EcsFormatter, properties={serviceName=my-app,serviceVersion=my-app-version,serviceNodeName=my-app-cluster-node}),\
375+
class=co.elastic.logging.jboss.logmanager.EcsFormatter, properties={serviceName=my-app,serviceVersion=my-app-version,serviceEnvironment=my-app-environment,serviceNodeName=my-app-cluster-node}),\
354376
/subsystem=logging/console-handler=CONSOLE:write-attribute(name=named-formatter,value=ECS)'
355377
----
356378

@@ -369,6 +391,11 @@ class=co.elastic.logging.jboss.logmanager.EcsFormatter, properties={serviceName=
369391
|
370392
|Sets the `service.version` field so you can filter your logs by a particular service version
371393

394+
|`serviceEnvironment`
395+
|String
396+
|
397+
|Sets the `service.environment` field so you can filter your logs by a particular service environment
398+
372399
|`serviceNodeName`
373400
|String
374401
|

ecs-logging-core/src/main/java/co/elastic/logging/EcsJsonSerializer.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public class EcsJsonSerializer {
3636
private static final TimestampSerializer TIMESTAMP_SERIALIZER = new TimestampSerializer();
3737
private static final ThreadLocal<StringBuilder> messageStringBuilder = new ThreadLocal<StringBuilder>();
3838
private static final String NEW_LINE = System.getProperty("line.separator");
39-
private static final Pattern NEW_LINE_PATTERN = Pattern.compile("\\n");
39+
private static final Pattern NEW_LINE_PATTERN = Pattern.compile("\\r\\n|\\n|\\r");
4040

4141
public static CharSequence toNullSafeString(final CharSequence s) {
4242
return s == null ? "" : s;
@@ -103,6 +103,14 @@ public static void serializeServiceVersion(StringBuilder builder, String service
103103
}
104104
}
105105

106+
public static void serializeServiceEnvironment(StringBuilder builder, String serviceEnvironment) {
107+
if (serviceEnvironment != null) {
108+
builder.append("\"service.environment\":\"");
109+
JsonUtils.quoteAsString(serviceEnvironment, builder);
110+
builder.append("\",");
111+
}
112+
}
113+
106114
public static void serializeServiceNodeName(StringBuilder builder, String serviceNodeName) {
107115
if (serviceNodeName != null) {
108116
builder.append("\"service.node.name\":\"");

ecs-logging-core/src/test/java/co/elastic/logging/AbstractEcsLoggingTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ void testMetadata() throws Exception {
6060
assertThat(logLine.get("process.thread.name").textValue()).isEqualTo(Thread.currentThread().getName());
6161
assertThat(logLine.get("service.name").textValue()).isEqualTo("test");
6262
assertThat(logLine.get("service.version").textValue()).isEqualTo("test-version");
63+
assertThat(logLine.get("service.environment").textValue()).isEqualTo("test-environment");
6364
assertThat(logLine.get("service.node.name").textValue()).isEqualTo("test-node");
6465
assertThat(Instant.parse(logLine.get("@timestamp").textValue())).isCloseTo(Instant.now(), within(1, ChronoUnit.MINUTES));
6566
assertThat(logLine.get("log.level").textValue()).isIn("DEBUG", "FINE");

ecs-logging-core/src/test/java/co/elastic/logging/EcsJsonSerializerTest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ void testEscaping() throws IOException {
6666
String loggerName = "logger\"";
6767
String serviceName = "test\"";
6868
String serviceVersion = "test-version\"";
69+
String serviceEnvironment = "test-environment\"";
6970
String serviceNodeName = "test-node\"";
7071
String eventDataset = "event-dataset\"";
7172
String threadName = "event-dataset\"";
@@ -77,6 +78,7 @@ void testEscaping() throws IOException {
7778
EcsJsonSerializer.serializeLoggerName(jsonBuilder, loggerName);
7879
EcsJsonSerializer.serializeServiceName(jsonBuilder, serviceName);
7980
EcsJsonSerializer.serializeServiceVersion(jsonBuilder, serviceVersion);
81+
EcsJsonSerializer.serializeServiceEnvironment(jsonBuilder, serviceEnvironment);
8082
EcsJsonSerializer.serializeServiceNodeName(jsonBuilder, serviceNodeName);
8183
EcsJsonSerializer.serializeEventDataset(jsonBuilder, eventDataset);
8284
EcsJsonSerializer.serializeThreadName(jsonBuilder, threadName);
@@ -88,6 +90,7 @@ void testEscaping() throws IOException {
8890
assertThat(jsonNode.get("log.logger").textValue()).isEqualTo(loggerName);
8991
assertThat(jsonNode.get("service.name").textValue()).isEqualTo(serviceName);
9092
assertThat(jsonNode.get("service.version").textValue()).isEqualTo(serviceVersion);
93+
assertThat(jsonNode.get("service.environment").textValue()).isEqualTo(serviceEnvironment);
9194
assertThat(jsonNode.get("service.node.name").textValue()).isEqualTo(serviceNodeName);
9295
assertThat(jsonNode.get("event.dataset").textValue()).isEqualTo(eventDataset);
9396
assertThat(jsonNode.get("process.thread.name").textValue()).isEqualTo(eventDataset);

jboss-logmanager-ecs-formatter/src/main/java/co/elastic/logging/jboss/logmanager/EcsFormatter.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ public class EcsFormatter extends ExtFormatter {
3737

3838
private String serviceName;
3939
private String serviceVersion;
40+
private String serviceEnvironment;
4041
private String serviceNodeName;
4142
private String eventDataset;
4243
private List<AdditionalField> additionalFields = Collections.emptyList();
@@ -45,7 +46,8 @@ public class EcsFormatter extends ExtFormatter {
4546

4647
public EcsFormatter() {
4748
serviceName = getProperty("co.elastic.logging.jboss.logmanager.EcsFormatter.serviceName", null);
48-
serviceVersion = getProperty("co.elastic.logging.jboss.logmanager.EcsFormatter.serviceversion", null);
49+
serviceVersion = getProperty("co.elastic.logging.jboss.logmanager.EcsFormatter.serviceVersion", null);
50+
serviceEnvironment = getProperty("co.elastic.logging.jboss.logmanager.EcsFormatter.serviceEnvironment", null);
4951
serviceNodeName = getProperty("co.elastic.logging.jboss.logmanager.EcsFormatter.serviceNodeName", null);
5052
eventDataset = getProperty("co.elastic.logging.jboss.logmanager.EcsFormatter.eventDataset", null);
5153
eventDataset = EcsJsonSerializer.computeEventDataset(eventDataset, serviceName);
@@ -62,6 +64,7 @@ public String format(ExtLogRecord record) {
6264
EcsJsonSerializer.serializeEcsVersion(builder);
6365
EcsJsonSerializer.serializeServiceName(builder, serviceName);
6466
EcsJsonSerializer.serializeServiceVersion(builder, serviceVersion);
67+
EcsJsonSerializer.serializeServiceEnvironment(builder, serviceEnvironment);
6568
EcsJsonSerializer.serializeServiceNodeName(builder, serviceNodeName);
6669
EcsJsonSerializer.serializeEventDataset(builder, eventDataset);
6770
EcsJsonSerializer.serializeThreadName(builder, record.getThreadName());
@@ -100,6 +103,10 @@ public void setServiceVersion(final String serviceVersion) {
100103
this.serviceVersion = serviceVersion;
101104
}
102105

106+
public void setServiceEnvironment(final String serviceEnvironment) {
107+
this.serviceEnvironment = serviceEnvironment;
108+
}
109+
103110
public void setServiceNodeName(final String serviceNodeName) {
104111
this.serviceNodeName = serviceNodeName;
105112
}

jboss-logmanager-ecs-formatter/src/test/java/co/elastic/logging/jboss/logmanager/EcsFormatterTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,8 +85,8 @@ public void printStackTrace(PrintWriter pw) {
8585
assertThat(result.get("error.type").textValue()).isEqualTo("co.elastic.logging.jboss.logmanager.EcsFormatterTest$1");
8686
assertThat(result.get("error.message").textValue()).isEqualTo("Example Exception Message");
8787
assertThat(result.get("error.stack_trace").textValue())
88-
.isEqualTo("co.elastic.logging.jboss.logmanager.EcsFormatterTest$1: Example Exception Message\n" +
89-
"\tat co.elastic.logging.jboss.logmanager.EcsFormatterTest.testExceptionLogging(EcsFormatterTest.java:125)\n");
88+
.isEqualTo("co.elastic.logging.jboss.logmanager.EcsFormatterTest$1: Example Exception Message" + System.lineSeparator() +
89+
"\tat co.elastic.logging.jboss.logmanager.EcsFormatterTest.testExceptionLogging(EcsFormatterTest.java:125)" + System.lineSeparator());
9090
}
9191
}
9292

jboss-logmanager-ecs-formatter/src/test/java/co/elastic/logging/jboss/logmanager/JBossLogManagerTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ void setUp() {
9090
formatter.setIncludeOrigin(true);
9191
formatter.setServiceName("test");
9292
formatter.setServiceVersion("test-version");
93+
formatter.setServiceEnvironment("test-environment");
9394
formatter.setServiceNodeName("test-node");
9495
formatter.setEventDataset("testdataset");
9596
formatter.setAdditionalFields("key1=value1,key2=value2");

jul-ecs-formatter/src/main/java/co/elastic/logging/jul/EcsFormatter.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ public class EcsFormatter extends Formatter {
4141
private boolean stackTraceAsArray;
4242
private String serviceName;
4343
private String serviceVersion;
44+
private String serviceEnvironment;
4445
private String serviceNodeName;
4546
private boolean includeOrigin;
4647
private String eventDataset;
@@ -52,6 +53,7 @@ public class EcsFormatter extends Formatter {
5253
public EcsFormatter() {
5354
serviceName = getProperty("co.elastic.logging.jul.EcsFormatter.serviceName", null);
5455
serviceVersion= getProperty("co.elastic.logging.jul.EcsFormatter.serviceVersion", null);
56+
serviceEnvironment= getProperty("co.elastic.logging.jul.EcsFormatter.serviceEnvironment", null);
5557
serviceNodeName = getProperty("co.elastic.logging.jul.EcsFormatter.serviceNodeName", null);
5658
includeOrigin = Boolean.parseBoolean(getProperty("co.elastic.logging.jul.EcsFormatter.includeOrigin", "false"));
5759
stackTraceAsArray = Boolean.parseBoolean(getProperty("co.elastic.logging.jul.EcsFormatter.stackTraceAsArray", "false"));
@@ -71,6 +73,7 @@ public String format(final LogRecord record) {
7173
EcsJsonSerializer.serializeMDC(builder, mdcSupplier.getMDC());
7274
EcsJsonSerializer.serializeServiceName(builder, serviceName);
7375
EcsJsonSerializer.serializeServiceVersion(builder, serviceVersion);
76+
EcsJsonSerializer.serializeServiceEnvironment(builder, serviceEnvironment);
7477
EcsJsonSerializer.serializeServiceNodeName(builder, serviceNodeName);
7578
EcsJsonSerializer.serializeEventDataset(builder, eventDataset);
7679
if (Thread.currentThread().getId() == record.getThreadID()) {
@@ -102,6 +105,10 @@ public void setServiceVersion(final String serviceVersion) {
102105
this.serviceVersion = serviceVersion;
103106
}
104107

108+
public void setServiceEnvironment(final String serviceEnvironment) {
109+
this.serviceEnvironment = serviceEnvironment;
110+
}
111+
105112
public void setServiceNodeName(final String serviceNodeName) {
106113
this.serviceNodeName = serviceNodeName;
107114
}

jul-ecs-formatter/src/test/java/co/elastic/logging/jul/JulLoggingTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,7 @@ protected EcsFormatter createEcsFormatter() {
133133
ret.setIncludeOrigin(true);
134134
ret.setServiceName("test");
135135
ret.setServiceVersion("test-version");
136+
ret.setServiceEnvironment("test-environment");
136137
ret.setServiceNodeName("test-node");
137138
ret.setEventDataset("testdataset");
138139
return ret;

jul-ecs-formatter/src/test/resources/logging.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# ECS formatter
22
co.elastic.logging.jul.EcsFormatter.serviceName=test
33
co.elastic.logging.jul.EcsFormatter.serviceVersion=test-version
4+
co.elastic.logging.jul.EcsFormatter.serviceEnvironment=test-environment
45
co.elastic.logging.jul.EcsFormatter.serviceNodeName=test-node
56
co.elastic.logging.jul.EcsFormatter.eventDataset=testdataset
67
co.elastic.logging.jul.EcsFormatter.includeOrigin=true

0 commit comments

Comments
 (0)