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.Log4jLogEvent;
26 import org.apache.logging.log4j.core.impl.MutableLogEvent;
27 import org.apache.logging.log4j.core.util.StringBuilderWriter;
28 import org.apache.logging.log4j.util.Strings;
29
30 import com.fasterxml.jackson.core.JsonGenerationException;
31 import com.fasterxml.jackson.databind.JsonMappingException;
32 import com.fasterxml.jackson.databind.ObjectWriter;
33
34 abstract class AbstractJacksonLayout extends AbstractStringLayout {
35
36 protected static final String DEFAULT_EOL = "\r\n";
37 protected static final String COMPACT_EOL = Strings.EMPTY;
38
39 protected final String eol;
40 protected final ObjectWriter objectWriter;
41 protected final boolean compact;
42 protected final boolean complete;
43
44 protected AbstractJacksonLayout(final Configuration config, final ObjectWriter objectWriter, final Charset charset,
45 final boolean compact, final boolean complete, final boolean eventEol, final Serializer headerSerializer,
46 final Serializer footerSerializer) {
47 super(config, charset, headerSerializer, footerSerializer);
48 this.objectWriter = objectWriter;
49 this.compact = compact;
50 this.complete = complete;
51 this.eol = compact && !eventEol ? COMPACT_EOL : DEFAULT_EOL;
52 }
53
54
55
56
57
58
59
60 @Override
61 public String toSerializable(final LogEvent event) {
62 final StringBuilderWriter writer = new StringBuilderWriter();
63 try {
64 toSerializable(event, writer);
65 return writer.toString();
66 } catch (final IOException e) {
67
68 LOGGER.error(e);
69 return Strings.EMPTY;
70 }
71 }
72
73 private static LogEvent convertMutableToLog4jEvent(final LogEvent event) {
74
75
76
77 return event instanceof MutableLogEvent
78 ? ((MutableLogEvent) event).createMemento()
79 : event;
80 }
81
82 public void toSerializable(final LogEvent event, final Writer writer)
83 throws JsonGenerationException, JsonMappingException, IOException {
84 objectWriter.writeValue(writer, convertMutableToLog4jEvent(event));
85 writer.write(eol);
86 markEvent();
87 }
88
89 }