Skip to content

Commit 73d1988

Browse files
rdifrangodgempiuceyalkoren
authored
Adding layout support to the logback ecs encoder (#220)
Signed-off-by: Difrango, Ronald <[email protected]> Co-authored-by: dgempiuc <[email protected]> Co-authored-by: eyalkoren <[email protected]>
1 parent 02d4625 commit 73d1988

File tree

1 file changed

+22
-2
lines changed
  • logback-ecs-encoder/src/main/java/co/elastic/logging/logback

1 file changed

+22
-2
lines changed

logback-ecs-encoder/src/main/java/co/elastic/logging/logback/EcsEncoder.java

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import ch.qos.logback.classic.spi.ILoggingEvent;
3030
import ch.qos.logback.classic.spi.IThrowableProxy;
3131
import ch.qos.logback.classic.spi.ThrowableProxy;
32+
import ch.qos.logback.core.Layout;
3233
import ch.qos.logback.core.encoder.EncoderBase;
3334
import co.elastic.logging.AdditionalField;
3435
import co.elastic.logging.EcsJsonSerializer;
@@ -56,6 +57,7 @@ public class EcsEncoder extends EncoderBase<ILoggingEvent> {
5657
private boolean includeOrigin;
5758
private final List<AdditionalField> additionalFields = new ArrayList<AdditionalField>();
5859
private OutputStream os;
60+
protected Layout<ILoggingEvent> messageLayout;
5961

6062
@Override
6163
public byte[] headerBytes() {
@@ -105,7 +107,7 @@ public byte[] encode(ILoggingEvent event) {
105107
StringBuilder builder = new StringBuilder(256);
106108
EcsJsonSerializer.serializeObjectStart(builder, event.getTimeStamp());
107109
EcsJsonSerializer.serializeLogLevel(builder, event.getLevel().toString());
108-
EcsJsonSerializer.serializeFormattedMessage(builder, event.getFormattedMessage());
110+
serializeMessage(event, builder);
109111
EcsJsonSerializer.serializeEcsVersion(builder);
110112
serializeMarkers(event, builder);
111113
EcsJsonSerializer.serializeServiceName(builder, serviceName);
@@ -140,12 +142,21 @@ public byte[] encode(ILoggingEvent event) {
140142
return builder.toString().getBytes(UTF_8);
141143
}
142144

145+
private void serializeMessage(ILoggingEvent event, StringBuilder builder) {
146+
if (messageLayout == null) {
147+
EcsJsonSerializer.serializeFormattedMessage(builder, event.getFormattedMessage());
148+
} else {
149+
EcsJsonSerializer.serializeFormattedMessage(builder, messageLayout.doLayout(event));
150+
}
151+
}
152+
143153
/**
144154
* Subclasses can override this to add custom fields.
145155
* The last character in the StringBuilder will be comma when this is called.
146156
* You must add a comma after each custom field.
147157
*/
148-
protected void addCustomFields(ILoggingEvent event, StringBuilder builder) {}
158+
protected void addCustomFields(ILoggingEvent event, StringBuilder builder) {
159+
}
149160

150161
private void serializeMarkers(ILoggingEvent event, StringBuilder builder) {
151162
Marker marker = event.getMarker();
@@ -210,4 +221,13 @@ public void setEventDataset(String eventDataset) {
210221
public void setThrowableConverter(ThrowableHandlingConverter throwableConverter) {
211222
this.throwableConverter = throwableConverter;
212223
}
224+
225+
/**
226+
* The supplied Layout will be applied specifically to format the <code>message</code> field based on the logging event.
227+
*
228+
* @param messageLayout
229+
*/
230+
public void setMessageLayout(Layout<ILoggingEvent> messageLayout) {
231+
this.messageLayout = messageLayout;
232+
}
213233
}

0 commit comments

Comments
 (0)