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.Appender;
23 import org.apache.logging.log4j.core.Core;
24 import org.apache.logging.log4j.core.Filter;
25 import org.apache.logging.log4j.core.Layout;
26 import org.apache.logging.log4j.core.LogEvent;
27 import org.apache.logging.log4j.core.config.Configuration;
28 import org.apache.logging.log4j.core.config.DefaultConfiguration;
29 import org.apache.logging.log4j.core.config.plugins.Plugin;
30 import org.apache.logging.log4j.core.config.plugins.PluginAttribute;
31 import org.apache.logging.log4j.core.config.plugins.PluginConfiguration;
32 import org.apache.logging.log4j.core.config.plugins.PluginElement;
33 import org.apache.logging.log4j.core.config.plugins.PluginFactory;
34 import org.apache.logging.log4j.core.config.plugins.validation.constraints.Required;
35 import org.apache.logging.log4j.core.config.plugins.validation.constraints.ValidPort;
36 import org.apache.logging.log4j.core.filter.ThresholdFilter;
37 import org.apache.logging.log4j.core.layout.HtmlLayout;
38 import org.apache.logging.log4j.core.net.SmtpManager;
39 import org.apache.logging.log4j.core.util.Booleans;
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59 @Plugin(name = "SMTP", category = Core.CATEGORY_NAME, elementType = Appender.ELEMENT_TYPE, printObject = true)
60 public final class SmtpAppender extends AbstractAppender {
61
62 private static final int DEFAULT_BUFFER_SIZE = 512;
63
64
65 private final SmtpManager manager;
66
67 private SmtpAppender(final String name, final Filter filter, final Layout<? extends Serializable> layout, final SmtpManager manager,
68 final boolean ignoreExceptions) {
69 super(name, filter, layout, ignoreExceptions);
70 this.manager = manager;
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
107
108
109
110
111
112 @PluginFactory
113 public static SmtpAppender createAppender(
114 @PluginConfiguration final Configuration config,
115 @PluginAttribute("name") @Required final String name,
116 @PluginAttribute("to") final String to,
117 @PluginAttribute("cc") final String cc,
118 @PluginAttribute("bcc") final String bcc,
119 @PluginAttribute("from") final String from,
120 @PluginAttribute("replyTo") final String replyTo,
121 @PluginAttribute("subject") final String subject,
122 @PluginAttribute("smtpProtocol") final String smtpProtocol,
123 @PluginAttribute("smtpHost") final String smtpHost,
124 @PluginAttribute(value = "smtpPort", defaultString = "0") @ValidPort final String smtpPortStr,
125 @PluginAttribute("smtpUsername") final String smtpUsername,
126 @PluginAttribute(value = "smtpPassword", sensitive = true) final String smtpPassword,
127 @PluginAttribute("smtpDebug") final String smtpDebug,
128 @PluginAttribute("bufferSize") final String bufferSizeStr,
129 @PluginElement("Layout") Layout<? extends Serializable> layout,
130 @PluginElement("Filter") Filter filter,
131 @PluginAttribute("ignoreExceptions") final String ignore) {
132 if (name == null) {
133 LOGGER.error("No name provided for SmtpAppender");
134 return null;
135 }
136
137 final boolean ignoreExceptions = Booleans.parseBoolean(ignore, true);
138 final int smtpPort = AbstractAppender.parseInt(smtpPortStr, 0);
139 final boolean isSmtpDebug = Boolean.parseBoolean(smtpDebug);
140 final int bufferSize = bufferSizeStr == null ? DEFAULT_BUFFER_SIZE : Integer.parseInt(bufferSizeStr);
141
142 if (layout == null) {
143 layout = HtmlLayout.createDefaultLayout();
144 }
145 if (filter == null) {
146 filter = ThresholdFilter.createFilter(null, null, null);
147 }
148 final Configuration configuration = config != null ? config : new DefaultConfiguration();
149
150 final SmtpManager manager = SmtpManager.getSmtpManager(configuration, to, cc, bcc, from, replyTo, subject, smtpProtocol,
151 smtpHost, smtpPort, smtpUsername, smtpPassword, isSmtpDebug, filter.toString(), bufferSize);
152 if (manager == null) {
153 return null;
154 }
155
156 return new SmtpAppender(name, filter, layout, manager, ignoreExceptions);
157 }
158
159
160
161
162
163
164 @Override
165 public boolean isFiltered(final LogEvent event) {
166 final boolean filtered = super.isFiltered(event);
167 if (filtered) {
168 manager.add(event);
169 }
170 return filtered;
171 }
172
173
174
175
176
177
178
179 @Override
180 public void append(final LogEvent event) {
181 manager.sendEvents(getLayout(), event);
182 }
183 }