1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.logging.log4j.core.layout;
18
19 import java.io.IOException;
20 import java.io.Writer;
21 import java.nio.charset.Charset;
22
23 import org.apache.logging.log4j.core.LogEvent;
24 import org.apache.logging.log4j.core.config.Configuration;
25 import org.apache.logging.log4j.core.impl.MutableLogEvent;
26 import org.apache.logging.log4j.core.util.StringBuilderWriter;
27 import org.apache.logging.log4j.util.Strings;
28
29 import com.fasterxml.jackson.core.JsonGenerationException;
30 import com.fasterxml.jackson.databind.JsonMappingException;
31 import com.fasterxml.jackson.databind.ObjectWriter;
32
33 abstract class AbstractJacksonLayout extends AbstractStringLayout {
34
35 protected static final String DEFAULT_EOL = "\r\n";
36 protected static final String COMPACT_EOL = Strings.EMPTY;
37
38 protected final String eol;
39 protected final ObjectWriter objectWriter;
40 protected final boolean compact;
41 protected final boolean complete;
42
43 protected AbstractJacksonLayout(final Configuration config, final ObjectWriter objectWriter, final Charset charset,
44 final boolean compact, final boolean complete, final boolean eventEol, final Serializer headerSerializer,
45 final Serializer footerSerializer) {
46 super(config, charset, headerSerializer, footerSerializer);
47 this.objectWriter = objectWriter;
48 this.compact = compact;
49 this.complete = complete;
50 this.eol = compact && !eventEol ? COMPACT_EOL : DEFAULT_EOL;
51 }
52
53
54
55
56
57
58
59 @Override
60 public String toSerializable(final LogEvent event) {
61 final StringBuilderWriter writer = new StringBuilderWriter();
62 try {
63 toSerializable(event, writer);
64 return writer.toString();
65 } catch (final IOException e) {
66
67 LOGGER.error(e);
68 return Strings.EMPTY;
69 }
70 }
71
72 private static LogEvent convertMutableToLog4jEvent(final LogEvent event) {
73
74
75
76 return event instanceof MutableLogEvent
77 ? ((MutableLogEvent) event).createMemento()
78 : event;
79 }
80
81 public void toSerializable(final LogEvent event, final Writer writer)
82 throws JsonGenerationException, JsonMappingException, IOException {
83 objectWriter.writeValue(writer, convertMutableToLog4jEvent(event));
84 writer.write(eol);
85 markEvent();
86 }
87
88 }