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.JMSQueueManager;
28
29 import java.io.Serializable;
30
31
32
33
34 @Plugin(name = "JMSQueue", category = "Core", elementType = "appender", printObject = true)
35 public final class JMSQueueAppender<T extends Serializable> extends AbstractAppender<T> {
36
37 private final JMSQueueManager manager;
38
39 private JMSQueueAppender(final String name, final Filter filter, final Layout<T> layout,
40 final JMSQueueManager 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> JMSQueueAppender<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("queueBindingName") final String queueBindingName,
88 @PluginAttr("userName") final String userName,
89 @PluginAttr("password") final String password,
90 @PluginElement("layout") Layout<S> layout,
91 @PluginElement("filter") final Filter filter,
92 @PluginAttr("suppressExceptions") final String suppress) {
93 if (name == null) {
94 LOGGER.error("No name provided for JMSQueueAppender");
95 return null;
96 }
97 final boolean handleExceptions = suppress == null ? true : Boolean.valueOf(suppress);
98 final JMSQueueManager manager = JMSQueueManager.getJMSQueueManager(factoryName, providerURL, urlPkgPrefixes,
99 securityPrincipalName, securityCredentials, factoryBindingName, queueBindingName, userName, password);
100 if (manager == null) {
101 return null;
102 }
103 if (layout == null) {
104 @SuppressWarnings({"unchecked", "UnnecessaryLocalVariable"})
105 Layout<S> l = (Layout<S>) SerializedLayout.createLayout();
106 layout = l;
107 }
108 return new JMSQueueAppender<S>(name, filter, layout, manager, handleExceptions);
109 }
110 }