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