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 java.io.Serializable;
20
21 import org.apache.logging.log4j.core.Filter;
22 import org.apache.logging.log4j.core.Layout;
23 import org.apache.logging.log4j.core.LogEvent;
24 import org.apache.logging.log4j.core.config.plugins.Plugin;
25 import org.apache.logging.log4j.core.config.plugins.PluginAttribute;
26 import org.apache.logging.log4j.core.config.plugins.PluginElement;
27 import org.apache.logging.log4j.core.config.plugins.PluginFactory;
28 import org.apache.logging.log4j.core.helpers.Booleans;
29 import org.apache.logging.log4j.core.layout.SerializedLayout;
30 import org.apache.logging.log4j.core.net.JMSTopicManager;
31
32
33
34
35 @Plugin(name = "JMSTopic", category = "Core", elementType = "appender", printObject = true)
36 public final class JMSTopicAppender extends AbstractAppender {
37
38 private final JMSTopicManager manager;
39
40 private JMSTopicAppender(final String name, final Filter filter, final Layout<? extends Serializable> layout,
41 final JMSTopicManager manager, final boolean ignoreExceptions) {
42 super(name, filter, layout, ignoreExceptions);
43 this.manager = manager;
44 }
45
46
47
48
49
50
51 @Override
52 public void append(final LogEvent event) {
53 try {
54 manager.send(getLayout().toSerializable(event));
55 } catch (final Exception ex) {
56 throw new AppenderLoggingException(ex);
57 }
58 }
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79 @PluginFactory
80 public static JMSTopicAppender createAppender(
81 @PluginAttribute("name") final String name,
82 @PluginAttribute("factoryName") final String factoryName,
83 @PluginAttribute("providerURL") final String providerURL,
84 @PluginAttribute("urlPkgPrefixes") final String urlPkgPrefixes,
85 @PluginAttribute("securityPrincipalName") final String securityPrincipalName,
86 @PluginAttribute("securityCredentials") final String securityCredentials,
87 @PluginAttribute("factoryBindingName") final String factoryBindingName,
88 @PluginAttribute("topicBindingName") final String topicBindingName,
89 @PluginAttribute("userName") final String userName,
90 @PluginAttribute("password") final String password,
91 @PluginElement("Layout") Layout<? extends Serializable> layout,
92 @PluginElement("Filters") final Filter filter,
93 @PluginAttribute("ignoreExceptions") final String ignore) {
94
95 if (name == null) {
96 LOGGER.error("No name provided for JMSQueueAppender");
97 return null;
98 }
99 final boolean ignoreExceptions = Booleans.parseBoolean(ignore, true);
100 final JMSTopicManager manager = JMSTopicManager.getJMSTopicManager(factoryName, providerURL, urlPkgPrefixes,
101 securityPrincipalName, securityCredentials, factoryBindingName, topicBindingName, userName, password);
102 if (manager == null) {
103 return null;
104 }
105 if (layout == null) {
106 layout = SerializedLayout.createLayout();
107 }
108 return new JMSTopicAppender(name, filter, layout, manager, ignoreExceptions);
109 }
110 }