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