Skip to content

Commit dbb7459

Browse files
committed
feat: Add an option to enable JSON logging
Configure Logback to optionally enable JSON logging by setting the environment variable `LOG_FORMAT` to `json`. This will later be used for the Elasticsearch logaccess provider where it is a lot easier to ingest JSON logs. The built-in `JsonEncoder` [1] is used instead of alternatives like [2] or [3] because it does not require any additional depdencies. The appender configuration enables a sequence number generator which to ensure the correct sorting of logs in case of identical timestamps. It also disables the `context` section because it currently does not contain relevant information. Relates to #571. [1]: https://logback.qos.ch/manual/encoders.html#JsonEncoder [2]: https://github.com/logfellow/logstash-logback-encoder [3]: https://github.com/pgomulka/java-ecs-logging/tree/master/logback-ecs-encoder Signed-off-by: Martin Nonnenmacher <martin.nonnenmacher@doubleopen.io>
1 parent 7568c31 commit dbb7459

5 files changed

Lines changed: 124 additions & 32 deletions

File tree

core/src/main/resources/logback.xml

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,31 @@
1818
-->
1919

2020
<configuration>
21-
<conversionRule conversionWord="customMdc" class="org.eclipse.apoapsis.ortserver.utils.logging.MdcConverter" />
22-
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
23-
<encoder>
24-
<pattern>time=%d{YYYY-MM-dd'T'HH:mm:ss.SSS} thread=%thread %customMdc level=%-5level logger=%logger{36} message="%replace(%msg){'\"','\\\"'}"%n</pattern>
25-
</encoder>
26-
</appender>
21+
<variable name="LOG_FORMAT" value="${LOG_FORMAT:-text}" />
22+
23+
<condition class="ch.qos.logback.core.boolex.PropertyEqualityCondition">
24+
<key>LOG_FORMAT</key>
25+
<value>json</value>
26+
</condition>
27+
<if>
28+
<then>
29+
<sequenceNumberGenerator class="ch.qos.logback.core.spi.BasicSequenceNumberGenerator" />
30+
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
31+
<encoder class="ch.qos.logback.classic.encoder.JsonEncoder">
32+
<withContext>false</withContext>
33+
</encoder>
34+
</appender>
35+
</then>
36+
<else>
37+
<conversionRule conversionWord="customMdc" class="org.eclipse.apoapsis.ortserver.utils.logging.MdcConverter" />
38+
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
39+
<encoder>
40+
<pattern>time=%d{YYYY-MM-dd'T'HH:mm:ss.SSS} thread=%thread %customMdc level=%-5level logger=%logger{36} message="%replace(%msg){'\"','\\\"'}"%n</pattern>
41+
</encoder>
42+
</appender>
43+
</else>
44+
</if>
45+
2746
<root level="trace">
2847
<appender-ref ref="STDOUT"/>
2948
</root>
@@ -34,5 +53,4 @@
3453
<logger name="org.flywaydb.core.internal.license.VersionPrinter" level="WARN"/>
3554
<logger name="io.ktor" level="INFO"/>
3655
<logger name="io.ktor.server.plugins.cors.CORS" level="TRACE"/>
37-
3856
</configuration>

orchestrator/src/main/resources/logback.xml

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,31 @@
1818
-->
1919

2020
<configuration>
21-
<conversionRule conversionWord="customMdc" class="org.eclipse.apoapsis.ortserver.utils.logging.MdcConverter" />
22-
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
23-
<encoder>
24-
<pattern>time=%d{YYYY-MM-dd'T'HH:mm:ss.SSS} thread=%thread %customMdc level=%-5level logger=%logger{36} message="%replace(%msg){'\"','\\\"'}"%n</pattern>
25-
</encoder>
26-
</appender>
21+
<variable name="LOG_FORMAT" value="${LOG_FORMAT:-text}" />
22+
23+
<condition class="ch.qos.logback.core.boolex.PropertyEqualityCondition">
24+
<key>LOG_FORMAT</key>
25+
<value>json</value>
26+
</condition>
27+
<if>
28+
<then>
29+
<sequenceNumberGenerator class="ch.qos.logback.core.spi.BasicSequenceNumberGenerator" />
30+
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
31+
<encoder class="ch.qos.logback.classic.encoder.JsonEncoder">
32+
<withContext>false</withContext>
33+
</encoder>
34+
</appender>
35+
</then>
36+
<else>
37+
<conversionRule conversionWord="customMdc" class="org.eclipse.apoapsis.ortserver.utils.logging.MdcConverter" />
38+
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
39+
<encoder>
40+
<pattern>time=%d{YYYY-MM-dd'T'HH:mm:ss.SSS} thread=%thread %customMdc level=%-5level logger=%logger{36} message="%replace(%msg){'\"','\\\"'}"%n</pattern>
41+
</encoder>
42+
</appender>
43+
</else>
44+
</if>
45+
2746
<root level="INFO">
2847
<appender-ref ref="STDOUT"/>
2948
</root>

tasks/src/main/resources/logback.xml

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,31 @@
1818
-->
1919

2020
<configuration>
21-
<conversionRule conversionWord="customMdc" class="org.eclipse.apoapsis.ortserver.utils.logging.MdcConverter" />
22-
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
23-
<encoder>
24-
<pattern>time=%d{YYYY-MM-dd'T'HH:mm:ss.SSS} thread=%thread %customMdc level=%-5level logger=%logger{36} message="%replace(%msg){'\"','\\\"'}"%n</pattern>
25-
</encoder>
26-
</appender>
21+
<variable name="LOG_FORMAT" value="${LOG_FORMAT:-text}" />
22+
23+
<condition class="ch.qos.logback.core.boolex.PropertyEqualityCondition">
24+
<key>LOG_FORMAT</key>
25+
<value>json</value>
26+
</condition>
27+
<if>
28+
<then>
29+
<sequenceNumberGenerator class="ch.qos.logback.core.spi.BasicSequenceNumberGenerator" />
30+
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
31+
<encoder class="ch.qos.logback.classic.encoder.JsonEncoder">
32+
<withContext>false</withContext>
33+
</encoder>
34+
</appender>
35+
</then>
36+
<else>
37+
<conversionRule conversionWord="customMdc" class="org.eclipse.apoapsis.ortserver.utils.logging.MdcConverter" />
38+
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
39+
<encoder>
40+
<pattern>time=%d{YYYY-MM-dd'T'HH:mm:ss.SSS} thread=%thread %customMdc level=%-5level logger=%logger{36} message="%replace(%msg){'\"','\\\"'}"%n</pattern>
41+
</encoder>
42+
</appender>
43+
</else>
44+
</if>
45+
2746
<root level="INFO">
2847
<appender-ref ref="STDOUT"/>
2948
</root>

utils/test/src/commonMain/resources/logback.xml

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,34 @@
1818
-->
1919

2020
<configuration>
21-
<conversionRule conversionWord="customMdc" class="org.eclipse.apoapsis.ortserver.utils.logging.MdcConverter" />
22-
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
23-
<encoder>
24-
<pattern>time=%d{YYYY-MM-dd'T'HH:mm:ss.SSS} thread=%thread %customMdc level=%-5level logger=%logger{36} message="%replace(%msg){'\"','\\\"'}"%n</pattern>
25-
</encoder>
26-
</appender>
21+
<variable name="LOG_FORMAT" value="${LOG_FORMAT:-text}" />
22+
23+
<condition class="ch.qos.logback.core.boolex.PropertyEqualityCondition">
24+
<key>LOG_FORMAT</key>
25+
<value>json</value>
26+
</condition>
27+
<if>
28+
<then>
29+
<sequenceNumberGenerator class="ch.qos.logback.core.spi.BasicSequenceNumberGenerator" />
30+
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
31+
<encoder class="ch.qos.logback.classic.encoder.JsonEncoder">
32+
<withContext>false</withContext>
33+
</encoder>
34+
</appender>
35+
</then>
36+
<else>
37+
<conversionRule conversionWord="customMdc" class="org.eclipse.apoapsis.ortserver.utils.logging.MdcConverter" />
38+
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
39+
<encoder>
40+
<pattern>time=%d{YYYY-MM-dd'T'HH:mm:ss.SSS} thread=%thread %customMdc level=%-5level logger=%logger{36} message="%replace(%msg){'\"','\\\"'}"%n</pattern>
41+
</encoder>
42+
</appender>
43+
</else>
44+
</if>
2745

2846
<root level="DEBUG">
2947
<appender-ref ref="STDOUT"/>
3048
</root>
31-
3249
<logger name="org.apache.http.headers" level="ERROR"/>
3350
<logger name="org.apache.http.wire" level="ERROR"/>
3451
<logger name="org.eclipse.jgit.internal.storage.file.FileSnapshot" level="ERROR"/>

workers/common/src/main/resources/logback.xml

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,31 @@
1818
-->
1919

2020
<configuration>
21-
<conversionRule conversionWord="customMdc" class="org.eclipse.apoapsis.ortserver.utils.logging.MdcConverter" />
22-
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
23-
<encoder>
24-
<pattern>time=%d{YYYY-MM-dd'T'HH:mm:ss.SSS} thread=%thread %customMdc level=%-5level logger=%logger{36} message="%replace(%msg){'\"','\\\"'}"%n</pattern>
25-
</encoder>
26-
</appender>
21+
<variable name="LOG_FORMAT" value="${LOG_FORMAT:-text}" />
22+
23+
<condition class="ch.qos.logback.core.boolex.PropertyEqualityCondition">
24+
<key>LOG_FORMAT</key>
25+
<value>json</value>
26+
</condition>
27+
<if>
28+
<then>
29+
<sequenceNumberGenerator class="ch.qos.logback.core.spi.BasicSequenceNumberGenerator" />
30+
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
31+
<encoder class="ch.qos.logback.classic.encoder.JsonEncoder">
32+
<withContext>false</withContext>
33+
</encoder>
34+
</appender>
35+
</then>
36+
<else>
37+
<conversionRule conversionWord="customMdc" class="org.eclipse.apoapsis.ortserver.utils.logging.MdcConverter" />
38+
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
39+
<encoder>
40+
<pattern>time=%d{YYYY-MM-dd'T'HH:mm:ss.SSS} thread=%thread %customMdc level=%-5level logger=%logger{36} message="%replace(%msg){'\"','\\\"'}"%n</pattern>
41+
</encoder>
42+
</appender>
43+
</else>
44+
</if>
45+
2746
<root level="INFO">
2847
<appender-ref ref="STDOUT"/>
2948
</root>

0 commit comments

Comments
 (0)