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.JmsQueueManager;
32 import org.apache.logging.log4j.core.util.Booleans;
33
34
35
36
37 @Plugin(name = "JMSQueue", category = "Core", elementType = "appender", printObject = true)
38 public final class JmsQueueAppender extends AbstractAppender {
39
40 private final JmsQueueManager manager;
41
42 private JmsQueueAppender(final String name, final Filter filter, final Layout<? extends Serializable> layout,
43 final JmsQueueManager 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 JmsQueueAppender 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("queueBindingName") final String queueBindingName,
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 if (name == null) {
97 LOGGER.error("No name provided for JmsQueueAppender");
98 return null;
99 }
100 final boolean ignoreExceptions = Booleans.parseBoolean(ignore, true);
101 final JmsQueueManager manager = JmsQueueManager.getJmsQueueManager(factoryName, providerURL, urlPkgPrefixes,
102 securityPrincipalName, securityCredentials, factoryBindingName, queueBindingName, userName, password);
103 if (manager == null) {
104 return null;
105 }
106 if (layout == null) {
107 layout = SerializedLayout.createLayout();
108 }
109 return new JmsQueueAppender(name, filter, layout, manager, ignoreExceptions);
110 }
111 }