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