Repository: logging-log4j2 Updated Branches: refs/heads/master 96aeca382 -> 4b7e3e229
Add some toString() methods for debugging (do not include passwords.) Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/4b7e3e22 Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/4b7e3e22 Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/4b7e3e22 Branch: refs/heads/master Commit: 4b7e3e229f155b280966d99349c8ef7a7f605cfa Parents: 96aeca3 Author: Gary Gregory <[email protected]> Authored: Thu May 25 19:34:19 2017 -0700 Committer: Gary Gregory <[email protected]> Committed: Thu May 25 19:34:19 2017 -0700 ---------------------------------------------------------------------- .../log4j/core/appender/mom/JmsAppender.java | 13 + .../log4j/core/appender/mom/JmsManager.java | 363 ++++++++++--------- 2 files changed, 199 insertions(+), 177 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4b7e3e22/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/mom/JmsAppender.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/mom/JmsAppender.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/mom/JmsAppender.java index c1732c7..ee8a737 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/mom/JmsAppender.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/mom/JmsAppender.java @@ -222,6 +222,19 @@ public class JmsAppender extends AbstractAppender { } } + /** + * Does not include the password. + */ + @Override + public String toString() { + return "Builder [name=" + name + ", factoryName=" + factoryName + ", providerUrl=" + providerUrl + + ", urlPkgPrefixes=" + urlPkgPrefixes + ", securityPrincipalName=" + securityPrincipalName + + ", securityCredentials=" + securityCredentials + ", factoryBindingName=" + factoryBindingName + + ", destinationBindingName=" + destinationBindingName + ", username=" + username + ", layout=" + + layout + ", filter=" + filter + ", ignoreExceptions=" + ignoreExceptions + ", jmsManager=" + + jmsManager + "]"; + } + } } http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4b7e3e22/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/mom/JmsManager.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/mom/JmsManager.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/mom/JmsManager.java index 8d70000..4ff0f05 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/mom/JmsManager.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/mom/JmsManager.java @@ -1,177 +1,186 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache license, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the license for the specific language governing permissions and - * limitations under the license. - */ - -package org.apache.logging.log4j.core.appender.mom; - -import java.io.Serializable; -import java.util.concurrent.TimeUnit; - -import javax.jms.Connection; -import javax.jms.ConnectionFactory; -import javax.jms.Destination; -import javax.jms.JMSException; -import javax.jms.Message; -import javax.jms.MessageConsumer; -import javax.jms.MessageProducer; -import javax.jms.Session; -import javax.naming.NamingException; - -import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.core.appender.AbstractManager; -import org.apache.logging.log4j.core.appender.ManagerFactory; -import org.apache.logging.log4j.core.net.JndiManager; -import org.apache.logging.log4j.status.StatusLogger; - -/** - * JMS connection and session manager. Can be used to access MessageProducer, MessageConsumer, and Message objects - * involving a configured ConnectionFactory and Destination. - */ -public class JmsManager extends AbstractManager { - - private static final Logger LOGGER = StatusLogger.getLogger(); - - private static final JmsManagerFactory FACTORY = new JmsManagerFactory(); - - private final JndiManager jndiManager; - private final Connection connection; - private final Session session; - private final Destination destination; - - private JmsManager(final String name, final JndiManager jndiManager, final String connectionFactoryName, - final String destinationName, final String username, final String password) - throws NamingException, JMSException { - super(null, name); - this.jndiManager = jndiManager; - final ConnectionFactory connectionFactory = this.jndiManager.lookup(connectionFactoryName); - if (username != null && password != null) { - this.connection = connectionFactory.createConnection(username, password); - } else { - this.connection = connectionFactory.createConnection(); - } - this.session = this.connection.createSession(false, Session.AUTO_ACKNOWLEDGE); - this.destination = this.jndiManager.lookup(destinationName); - this.connection.start(); - } - - /** - * Gets a JmsManager using the specified configuration parameters. - * - * @param name The name to use for this JmsManager. - * @param jndiManager The JndiManager to look up JMS information through. - * @param connectionFactoryName The binding name for the {@link javax.jms.ConnectionFactory}. - * @param destinationName The binding name for the {@link javax.jms.Destination}. - * @param username The username to connect with or {@code null} for no authentication. - * @param password The password to use with the given username or {@code null} for no authentication. - * @return The JmsManager as configured. - */ - public static JmsManager getJmsManager(final String name, final JndiManager jndiManager, - final String connectionFactoryName, final String destinationName, - final String username, final String password) { - final JmsConfiguration configuration = new JmsConfiguration(jndiManager, connectionFactoryName, destinationName, - username, password); - return getManager(name, FACTORY, configuration); - } - - /** - * Creates a MessageConsumer on this Destination using the current Session. - * - * @return A MessageConsumer on this Destination. - * @throws JMSException - */ - public MessageConsumer createMessageConsumer() throws JMSException { - return this.session.createConsumer(this.destination); - } - - /** - * Creates a MessageProducer on this Destination using the current Session. - * - * @return A MessageProducer on this Destination. - * @throws JMSException - */ - public MessageProducer createMessageProducer() throws JMSException { - return this.session.createProducer(this.destination); - } - - /** - * Creates a TextMessage or ObjectMessage from a Serializable object. For instance, when using a text-based - * {@link org.apache.logging.log4j.core.Layout} such as {@link org.apache.logging.log4j.core.layout.PatternLayout}, - * the {@link org.apache.logging.log4j.core.LogEvent} message will be serialized to a String. When using a - * layout such as {@link org.apache.logging.log4j.core.layout.SerializedLayout}, the LogEvent message will be - * serialized as a Java object. - * - * @param object The LogEvent or String message to wrap. - * @return A new JMS message containing the provided object. - * @throws JMSException - */ - public Message createMessage(final Serializable object) throws JMSException { - if (object instanceof String) { - return this.session.createTextMessage((String) object); - } - return this.session.createObjectMessage(object); - } - - @Override - protected boolean releaseSub(final long timeout, final TimeUnit timeUnit) { - boolean closed = true; - try { - this.session.close(); - } catch (final JMSException ignored) { - // ignore - closed = false; - } - try { - this.connection.close(); - } catch (final JMSException ignored) { - // ignore - closed = false; - } - return closed && this.jndiManager.stop(timeout, timeUnit); - } - - private static class JmsConfiguration { - private final JndiManager jndiManager; - private final String connectionFactoryName; - private final String destinationName; - private final String username; - private final String password; - - private JmsConfiguration(final JndiManager jndiManager, final String connectionFactoryName, final String destinationName, - final String username, final String password) { - this.jndiManager = jndiManager; - this.connectionFactoryName = connectionFactoryName; - this.destinationName = destinationName; - this.username = username; - this.password = password; - } - } - - private static class JmsManagerFactory implements ManagerFactory<JmsManager, JmsConfiguration> { - - @Override - public JmsManager createManager(final String name, final JmsConfiguration data) { - try { - return new JmsManager(name, data.jndiManager, data.connectionFactoryName, data.destinationName, - data.username, data.password); - } catch (final Exception e) { - LOGGER.error("Error creating JmsManager using ConnectionFactory [{}] and Destination [{}].", - data.connectionFactoryName, data.destinationName, e); - return null; - } - } - } - -} +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache license, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the license for the specific language governing permissions and + * limitations under the license. + */ + +package org.apache.logging.log4j.core.appender.mom; + +import java.io.Serializable; +import java.util.concurrent.TimeUnit; + +import javax.jms.Connection; +import javax.jms.ConnectionFactory; +import javax.jms.Destination; +import javax.jms.JMSException; +import javax.jms.Message; +import javax.jms.MessageConsumer; +import javax.jms.MessageProducer; +import javax.jms.Session; +import javax.naming.NamingException; + +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.core.appender.AbstractManager; +import org.apache.logging.log4j.core.appender.ManagerFactory; +import org.apache.logging.log4j.core.net.JndiManager; +import org.apache.logging.log4j.status.StatusLogger; + +/** + * JMS connection and session manager. Can be used to access MessageProducer, MessageConsumer, and Message objects + * involving a configured ConnectionFactory and Destination. + */ +public class JmsManager extends AbstractManager { + + private static final Logger LOGGER = StatusLogger.getLogger(); + + private static final JmsManagerFactory FACTORY = new JmsManagerFactory(); + + private final JndiManager jndiManager; + private final Connection connection; + private final Session session; + private final Destination destination; + + private JmsManager(final String name, final JndiManager jndiManager, final String connectionFactoryName, + final String destinationName, final String username, final String password) + throws NamingException, JMSException { + super(null, name); + this.jndiManager = jndiManager; + final ConnectionFactory connectionFactory = this.jndiManager.lookup(connectionFactoryName); + if (username != null && password != null) { + this.connection = connectionFactory.createConnection(username, password); + } else { + this.connection = connectionFactory.createConnection(); + } + this.session = this.connection.createSession(false, Session.AUTO_ACKNOWLEDGE); + this.destination = this.jndiManager.lookup(destinationName); + this.connection.start(); + } + + /** + * Gets a JmsManager using the specified configuration parameters. + * + * @param name The name to use for this JmsManager. + * @param jndiManager The JndiManager to look up JMS information through. + * @param connectionFactoryName The binding name for the {@link javax.jms.ConnectionFactory}. + * @param destinationName The binding name for the {@link javax.jms.Destination}. + * @param username The username to connect with or {@code null} for no authentication. + * @param password The password to use with the given username or {@code null} for no authentication. + * @return The JmsManager as configured. + */ + public static JmsManager getJmsManager(final String name, final JndiManager jndiManager, + final String connectionFactoryName, final String destinationName, + final String username, final String password) { + final JmsConfiguration configuration = new JmsConfiguration(jndiManager, connectionFactoryName, destinationName, + username, password); + return getManager(name, FACTORY, configuration); + } + + /** + * Creates a MessageConsumer on this Destination using the current Session. + * + * @return A MessageConsumer on this Destination. + * @throws JMSException + */ + public MessageConsumer createMessageConsumer() throws JMSException { + return this.session.createConsumer(this.destination); + } + + /** + * Creates a MessageProducer on this Destination using the current Session. + * + * @return A MessageProducer on this Destination. + * @throws JMSException + */ + public MessageProducer createMessageProducer() throws JMSException { + return this.session.createProducer(this.destination); + } + + /** + * Creates a TextMessage or ObjectMessage from a Serializable object. For instance, when using a text-based + * {@link org.apache.logging.log4j.core.Layout} such as {@link org.apache.logging.log4j.core.layout.PatternLayout}, + * the {@link org.apache.logging.log4j.core.LogEvent} message will be serialized to a String. When using a + * layout such as {@link org.apache.logging.log4j.core.layout.SerializedLayout}, the LogEvent message will be + * serialized as a Java object. + * + * @param object The LogEvent or String message to wrap. + * @return A new JMS message containing the provided object. + * @throws JMSException + */ + public Message createMessage(final Serializable object) throws JMSException { + if (object instanceof String) { + return this.session.createTextMessage((String) object); + } + return this.session.createObjectMessage(object); + } + + @Override + protected boolean releaseSub(final long timeout, final TimeUnit timeUnit) { + boolean closed = true; + try { + this.session.close(); + } catch (final JMSException ignored) { + // ignore + closed = false; + } + try { + this.connection.close(); + } catch (final JMSException ignored) { + // ignore + closed = false; + } + return closed && this.jndiManager.stop(timeout, timeUnit); + } + + private static class JmsConfiguration { + private final JndiManager jndiManager; + private final String connectionFactoryName; + private final String destinationName; + private final String username; + private final String password; + + private JmsConfiguration(final JndiManager jndiManager, final String connectionFactoryName, final String destinationName, + final String username, final String password) { + this.jndiManager = jndiManager; + this.connectionFactoryName = connectionFactoryName; + this.destinationName = destinationName; + this.username = username; + this.password = password; + } + + /** + * Does not include the password. + */ + @Override + public String toString() { + return "JmsConfiguration [jndiManager=" + jndiManager + ", connectionFactoryName=" + connectionFactoryName + + ", destinationName=" + destinationName + ", username=" + username + "]"; + } + } + + private static class JmsManagerFactory implements ManagerFactory<JmsManager, JmsConfiguration> { + + @Override + public JmsManager createManager(final String name, final JmsConfiguration data) { + try { + return new JmsManager(name, data.jndiManager, data.connectionFactoryName, data.destinationName, + data.username, data.password); + } catch (final Exception e) { + LOGGER.error("Error creating JmsManager using ConnectionFactory [{}] and Destination [{}].", + data.connectionFactoryName, data.destinationName, e); + return null; + } + } + } + +}
