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.nio.charset.Charset;
21
22 import org.apache.commons.csv.CSVFormat;
23 import org.apache.commons.csv.QuoteMode;
24 import org.apache.logging.log4j.core.Layout;
25 import org.apache.logging.log4j.core.LogEvent;
26 import org.apache.logging.log4j.core.config.Configuration;
27 import org.apache.logging.log4j.core.config.Node;
28 import org.apache.logging.log4j.core.config.plugins.Plugin;
29 import org.apache.logging.log4j.core.config.plugins.PluginAttribute;
30 import org.apache.logging.log4j.core.config.plugins.PluginConfiguration;
31 import org.apache.logging.log4j.core.config.plugins.PluginFactory;
32 import org.apache.logging.log4j.message.Message;
33 import org.apache.logging.log4j.status.StatusLogger;
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 @Plugin(name = "CsvParameterLayout", category = Node.CATEGORY, elementType = Layout.ELEMENT_TYPE, printObject = true)
51 public class CsvParameterLayout extends AbstractCsvLayout {
52
53 public static AbstractCsvLayout createDefaultLayout() {
54 return new CsvParameterLayout(null, Charset.forName(DEFAULT_CHARSET), CSVFormat.valueOf(DEFAULT_FORMAT), null, null);
55 }
56
57 public static AbstractCsvLayout createLayout(final CSVFormat format) {
58 return new CsvParameterLayout(null, Charset.forName(DEFAULT_CHARSET), format, null, null);
59 }
60
61 @PluginFactory
62 public static AbstractCsvLayout createLayout(
63
64 @PluginConfiguration final Configuration config,
65 @PluginAttribute(value = "format", defaultString = DEFAULT_FORMAT) final String format,
66 @PluginAttribute("delimiter") final Character delimiter,
67 @PluginAttribute("escape") final Character escape,
68 @PluginAttribute("quote") final Character quote,
69 @PluginAttribute("quoteMode") final QuoteMode quoteMode,
70 @PluginAttribute("nullString") final String nullString,
71 @PluginAttribute("recordSeparator") final String recordSeparator,
72 @PluginAttribute(value = "charset", defaultString = DEFAULT_CHARSET) final Charset charset,
73 @PluginAttribute("header") final String header,
74 @PluginAttribute("footer") final String footer)
75
76 {
77
78 final CSVFormat csvFormat = createFormat(format, delimiter, escape, quote, quoteMode, nullString, recordSeparator);
79 return new CsvParameterLayout(config, charset, csvFormat, header, footer);
80 }
81
82 public CsvParameterLayout(final Configuration config, final Charset charset, final CSVFormat csvFormat, final String header, final String footer) {
83 super(config, charset, csvFormat, header, footer);
84 }
85
86 @Override
87 public String toSerializable(final LogEvent event) {
88 final Message message = event.getMessage();
89 final Object[] parameters = message.getParameters();
90 final StringBuilder buffer = getStringBuilder();
91 try {
92 getFormat().printRecord(buffer, parameters);
93 return buffer.toString();
94 } catch (final IOException e) {
95 StatusLogger.getLogger().error(message, e);
96 return getFormat().getCommentMarker() + " " + e;
97 }
98 }
99
100 }