1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.logging.log4j.core.appender;
18
19 import org.apache.logging.log4j.core.Filter;
20 import org.apache.logging.log4j.core.Layout;
21 import org.apache.logging.log4j.core.config.Configuration;
22 import org.apache.logging.log4j.core.config.plugins.Plugin;
23 import org.apache.logging.log4j.core.config.plugins.PluginAttr;
24 import org.apache.logging.log4j.core.config.plugins.PluginConfiguration;
25 import org.apache.logging.log4j.core.config.plugins.PluginElement;
26 import org.apache.logging.log4j.core.config.plugins.PluginFactory;
27 import org.apache.logging.log4j.core.layout.RFC5424Layout;
28 import org.apache.logging.log4j.core.layout.SyslogLayout;
29 import org.apache.logging.log4j.core.net.AbstractSocketManager;
30
31 import java.nio.charset.Charset;
32
33
34
35
36 @Plugin(name = "Syslog", type = "Core", elementType = "appender", printObject = true)
37 public class SyslogAppender extends SocketAppender {
38
39 private static final String BSD = "bsd";
40
41 private static final String RFC5424 = "RFC5424";
42
43 protected SyslogAppender(String name, Layout layout, Filter filter,
44 boolean handleException, boolean immediateFlush, AbstractSocketManager manager) {
45 super(name, layout, filter, manager, handleException, immediateFlush);
46
47 }
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78 @PluginFactory
79 public static SyslogAppender createAppender(@PluginAttr("host") String host,
80 @PluginAttr("port") String portNum,
81 @PluginAttr("protocol") String protocol,
82 @PluginAttr("reconnectionDelay") String delay,
83 @PluginAttr("name") String name,
84 @PluginAttr("immediateFlush") String immediateFlush,
85 @PluginAttr("suppressExceptions") String suppress,
86 @PluginAttr("facility") String facility,
87 @PluginAttr("id") String id,
88 @PluginAttr("enterpriseNumber") String ein,
89 @PluginAttr("includeMDC") String includeMDC,
90 @PluginAttr("mdcId") String mdcId,
91 @PluginAttr("newLine") String includeNL,
92 @PluginAttr("appName") String appName,
93 @PluginAttr("messageId") String msgId,
94 @PluginAttr("mdcExcludes") String excludes,
95 @PluginAttr("mdcIncludes") String includes,
96 @PluginAttr("mdcRequired") String required,
97 @PluginAttr("format") String format,
98 @PluginElement("filters") Filter filter,
99 @PluginConfiguration Configuration config,
100 @PluginAttr("charset") String charset) {
101
102 boolean isFlush = immediateFlush == null ? true : Boolean.valueOf(immediateFlush);
103 boolean handleExceptions = suppress == null ? true : Boolean.valueOf(suppress);
104 int reconnectDelay = delay == null ? 0 : Integer.parseInt(delay);
105 int port = portNum == null ? 0 : Integer.parseInt(portNum);
106 Charset c = Charset.isSupported("UTF-8") ? Charset.forName("UTF-8") : Charset.defaultCharset();
107 if (charset != null) {
108 if (Charset.isSupported(charset)) {
109 c = Charset.forName(charset);
110 } else {
111 LOGGER.error("Charset " + charset + " is not supported for layout, using " + c.displayName());
112 }
113 }
114 Layout layout = (format.equalsIgnoreCase(RFC5424)) ?
115 RFC5424Layout.createLayout(facility, id, ein, includeMDC, mdcId, includeNL, appName, msgId,
116 excludes, includes, required, charset, config) :
117 SyslogLayout.createLayout(facility, includeNL, charset);
118
119 if (name == null) {
120 LOGGER.error("No name provided for SyslogAppender");
121 return null;
122 }
123 AbstractSocketManager manager = createSocketManager(protocol, host, port, reconnectDelay);
124 if (manager == null) {
125 return null;
126 }
127
128 return new SyslogAppender(name, layout, filter, handleExceptions, isFlush, manager);
129 }
130
131
132 }