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