1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.logging.log4j.core.appender;
19
20 import java.io.Serializable;
21
22 import org.apache.logging.log4j.core.Filter;
23 import org.apache.logging.log4j.core.Layout;
24 import org.apache.logging.log4j.core.LogEvent;
25 import org.apache.logging.log4j.core.config.plugins.Plugin;
26 import org.apache.logging.log4j.core.config.plugins.PluginAttribute;
27 import org.apache.logging.log4j.core.config.plugins.PluginElement;
28 import org.apache.logging.log4j.core.config.plugins.PluginFactory;
29 import org.apache.logging.log4j.core.filter.ThresholdFilter;
30 import org.apache.logging.log4j.core.layout.HtmlLayout;
31 import org.apache.logging.log4j.core.net.SmtpManager;
32 import org.apache.logging.log4j.core.util.Booleans;
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52 @Plugin(name = "SMTP", category = "Core", elementType = "appender", printObject = true)
53 public final class SmtpAppender extends AbstractAppender {
54
55 private static final long serialVersionUID = 1L;
56 private static final int DEFAULT_BUFFER_SIZE = 512;
57
58
59 private final SmtpManager manager;
60
61 private SmtpAppender(final String name, final Filter filter, final Layout<? extends Serializable> layout, final SmtpManager manager,
62 final boolean ignoreExceptions) {
63 super(name, filter, layout, ignoreExceptions);
64 this.manager = manager;
65 }
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106 @PluginFactory
107 public static SmtpAppender createAppender(
108 @PluginAttribute("name") final String name,
109 @PluginAttribute("to") final String to,
110 @PluginAttribute("cc") final String cc,
111 @PluginAttribute("bcc") final String bcc,
112 @PluginAttribute("from") final String from,
113 @PluginAttribute("replyTo") final String replyTo,
114 @PluginAttribute("subject") final String subject,
115 @PluginAttribute("smtpProtocol") final String smtpProtocol,
116 @PluginAttribute("smtpHost") final String smtpHost,
117 @PluginAttribute("smtpPort") final String smtpPortStr,
118 @PluginAttribute("smtpUsername") final String smtpUsername,
119 @PluginAttribute("smtpPassword") final String smtpPassword,
120 @PluginAttribute("smtpDebug") final String smtpDebug,
121 @PluginAttribute("bufferSize") final String bufferSizeStr,
122 @PluginElement("Layout") Layout<? extends Serializable> layout,
123 @PluginElement("Filter") Filter filter,
124 @PluginAttribute("ignoreExceptions") final String ignore) {
125 if (name == null) {
126 LOGGER.error("No name provided for SmtpAppender");
127 return null;
128 }
129
130 final boolean ignoreExceptions = Booleans.parseBoolean(ignore, true);
131 final int smtpPort = AbstractAppender.parseInt(smtpPortStr, 0);
132 final boolean isSmtpDebug = Boolean.parseBoolean(smtpDebug);
133 final int bufferSize = bufferSizeStr == null ? DEFAULT_BUFFER_SIZE : Integer.parseInt(bufferSizeStr);
134
135 if (layout == null) {
136 layout = HtmlLayout.createDefaultLayout();
137 }
138 if (filter == null) {
139 filter = ThresholdFilter.createFilter(null, null, null);
140 }
141
142 final SmtpManager manager = SmtpManager.getSMTPManager(to, cc, bcc, from, replyTo, subject, smtpProtocol,
143 smtpHost, smtpPort, smtpUsername, smtpPassword, isSmtpDebug, filter.toString(), bufferSize);
144 if (manager == null) {
145 return null;
146 }
147
148 return new SmtpAppender(name, filter, layout, manager, ignoreExceptions);
149 }
150
151
152
153
154
155
156 @Override
157 public boolean isFiltered(final LogEvent event) {
158 final boolean filtered = super.isFiltered(event);
159 if (filtered) {
160 manager.add(event);
161 }
162 return filtered;
163 }
164
165
166
167
168
169
170
171 @Override
172 public void append(final LogEvent event) {
173 manager.sendEvents(getLayout(), event);
174 }
175 }