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.JMSQueueManager;
31
32
33
34
35 @Plugin(name = "JMSQueue", category = "Core", elementType = "appender", printObject = true)
36 public final class JMSQueueAppender extends AbstractAppender {
37
38 private final JMSQueueManager manager;
39
40 private JMSQueueAppender(final String name, final Filter filter, final Layout<? extends Serializable> layout,
41 final JMSQueueManager 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 JMSQueueAppender 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("queueBindingName") final String queueBindingName,
89 @PluginAttribute("userName") final String userName,
90 @PluginAttribute("password") final String password,
91 @PluginElement("Layout") Layout<? extends Serializable> layout,
92 @PluginElement("Filter") final Filter filter,
93 @PluginAttribute("ignoreExceptions") final String ignore) {
94 if (name == null) {
95 LOGGER.error("No name provided for JMSQueueAppender");
96 return null;
97 }
98 final boolean ignoreExceptions = Booleans.parseBoolean(ignore, true);
99 final JMSQueueManager manager = JMSQueueManager.getJMSQueueManager(factoryName, providerURL, urlPkgPrefixes,
100 securityPrincipalName, securityCredentials, factoryBindingName, queueBindingName, userName, password);
101 if (manager == null) {
102 return null;
103 }
104 if (layout == null) {
105 layout = SerializedLayout.createLayout();
106 }
107 return new JMSQueueAppender(name, filter, layout, manager, ignoreExceptions);
108 }
109 }