[logback-user] Configuring JMSQueueAppender to send messages to a Websphere MQ server

Espen Rydningen espenrydningen at gmail.com
Wed Aug 25 16:28:31 CEST 2010


Hi

Has anyone successfully configured the JMSQueueAppender to send
messages to a Websphere MQ server? I'm really struggling with this.
Hope someone can assist. Here is my configuration file:

logback-test.xml

<?xml version="1.0" encoding="UTF-8" ?>
<configuration>

  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
      <pattern>
        %d{HH:mm:ss} [%thread] %-5level %logger{0} - %msg%n
      </pattern>
    </encoder>
  </appender>

  <appender name="QUEUE" class="com.foo.bar.common.log.CustomJMSQueueAppender">
    <InitialContextFactoryName>org.apache.activemq.jndi.ActiveMQInitialContextFactory</InitialContextFactoryName>
    <ProviderURL>tcp://10.10.10.10:1414</ProviderURL>
    <QueueConnectionFactoryBindingName>ConnectionFactory</QueueConnectionFactoryBindingName>
    <QueueBindingName>app_test_log</QueueBindingName>

    <!-- Only messages with marker JMS gets through to queue-->
    <filter class="com.foo.bar.common.log.MarkerFilter">
    	<marker>JMS</marker>
    	<onMismatch>DENY</onMismatch>
      	<onMatch>ACCEPT</onMatch>
    </filter>
  </appender>

  <root level="TRACE" >
    <appender-ref ref="STDOUT" />
    <appender-ref ref="QUEUE" />
  </root>
</configuration>

My MQ guy who sat up the queue gave me these values:

qmanager is ESAPFOK9
machine is 10.10.10.10
Channel is app.logging
queue is app_test_log

These are the essential parts of my Maven2 pom file:

<?xml version="1.0" encoding="UTF-8"?>
(...)

    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
      <version>0.9.21</version>
    </dependency>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.8.1</version>
      <scope>test</scope>
    </dependency>

    <dependency>
		<groupId>org.apache.activemq</groupId>
		<artifactId>activemq-core</artifactId>
		<version>5.0.0</version>
		<scope>test</scope>
		<exclusions>
			<exclusion>
				<groupId>commons-logging</groupId>
				<artifactId>commons-logging</artifactId>
			</exclusion>
			<exclusion>
				<groupId>commons-logging</groupId>
				<artifactId>commons-logging-api</artifactId>
			</exclusion>
			<exclusion>
                <groupId>org.apache.activemq</groupId>
                <artifactId>activeio-core</artifactId>
            </exclusion>
	</exclusions>
    </dependency>

  </dependencies>

</project>

I made a really simple Junit test:

public class CustomJMSQueueAppenderTest {
    private final static Logger logger =
LoggerFactory.getLogger(CustomJMSQueueAppenderTest.class);
    private static Marker JMS_LOG = MarkerFactory.getMarker("JMS_LOG");

    @Test
    public void sendLogMessageToMqAndFile(){
        logger.info("New test run: {}", new Date());
        logger.info("This message will only be sent to console");
        logger.info(JMS_LOG, "This message is to be sent both to
console and to JMS");
    }
}

But alas, this was the result:

Running com.foo.bar.common.log.CustomJMSQueueAppenderTest
15:50:41,860 |-INFO in ch.qos.logback.classic.LoggerContext[default] -
Found resource [logback-test.xml] at
[file:/usr/IBM/build/frontend-trunk/delegator/foobar/target/test-classes/logback-test.xml]
15:50:42,329 |-INFO in
ch.qos.logback.classic.joran.action.ConfigurationAction - debug
attribute not set
15:50:42,411 |-INFO in ch.qos.logback.core.joran.action.AppenderAction
- About to instantiate appender of type
[ch.qos.logback.core.ConsoleAppender]
15:50:42,431 |-INFO in ch.qos.logback.core.joran.action.AppenderAction
- Naming appender as [STDOUT]
15:50:42,593 |-INFO in
ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Pushing
component [encoder] on top of the object stack.
15:50:42,872 |-INFO in
ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Pushing
component [filter] on top of the object stack.
15:50:42,961 |-INFO in ch.qos.logback.core.joran.action.AppenderAction
- About to instantiate appender of type
[com.foo.bar.common.log.CustomJMSQueueAppender]
15:50:42,981 |-INFO in ch.qos.logback.core.joran.action.AppenderAction
- Naming appender as [QUEUE]
15:50:43,070 |-INFO in
ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Pushing
component [filter] on top of the object stack.
15:50:47,121 |-ERROR in
com.foo.bar.common.log.CustomJMSQueueAppender[QUEUE] - Error while
activating options for appender named [QUEUE]. javax.jms.JMSException:
java.io.EOFException
        at javax.jms.JMSException: java.io.EOFException
        at      at
org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:49)
        at      at
org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1178)
        at      at
org.apache.activemq.ActiveMQConnection.ensureConnectionInfoSent(ActiveMQConnection.java:1262)
        at      at
org.apache.activemq.ActiveMQConnection.createSession(ActiveMQConnection.java:292)
        at      at
org.apache.activemq.ActiveMQConnection.createQueueSession(ActiveMQConnection.java:1123)
        at      at
ch.qos.logback.classic.net.JMSQueueAppender.start(JMSQueueAppender.java:113)
        at      at
ch.qos.logback.core.joran.action.AppenderAction.end(AppenderAction.java:96)
        at      at
ch.qos.logback.core.joran.spi.Interpreter.callEndAction(Interpreter.java:315)
        at      at
ch.qos.logback.core.joran.spi.Interpreter.endElement(Interpreter.java:194)
        at      at
ch.qos.logback.core.joran.spi.Interpreter.endElement(Interpreter.java:180)
        at      at
ch.qos.logback.core.joran.spi.EventPlayer.play(EventPlayer.java:52)
        at      at
ch.qos.logback.core.joran.spi.Interpreter.play(Interpreter.java:332)
        at      at
ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:126)
        at      at
ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:93)
        at      at
ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:52)
        at      at
ch.qos.logback.classic.util.ContextInitializer.configureByResource(ContextInitializer.java:60)
        at      at
ch.qos.logback.classic.util.ContextInitializer.autoConfig(ContextInitializer.java:121)
        at      at
org.slf4j.impl.StaticLoggerBinder.init(StaticLoggerBinder.java:85)
        at      at
org.slf4j.impl.StaticLoggerBinder.<clinit>(StaticLoggerBinder.java:55)
        at      at java.lang.J9VMInternals.initializeImpl(Native Method)
        at      at java.lang.J9VMInternals.initialize(J9VMInternals.java:194)
        at      at org.slf4j.LoggerFactory.bind(LoggerFactory.java:121)
        at      at
org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:111)
        at      at
org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:268)
        at      at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:241)
        at      at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:254)
        at      at
com.foo.bar.common.log.CustomJMSQueueAppenderTest.<clinit>(CustomJMSQueueAppenderTest.java:13)
        at      at java.lang.J9VMInternals.initializeImpl(Native Method)
        at      at java.lang.J9VMInternals.initialize(J9VMInternals.java:194)
        at      at
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at      at
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:67)
        at      at
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at      at
java.lang.reflect.Constructor.newInstance(Constructor.java:522)
        at      at
org.junit.runners.BlockJUnit4ClassRunner.createTest(BlockJUnit4ClassRunner.java:202)
        at      at
org.junit.runners.BlockJUnit4ClassRunner$1.runReflectiveCall(BlockJUnit4ClassRunner.java:251)
        at      at
org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
        at      at
org.junit.runners.BlockJUnit4ClassRunner.methodBlock(BlockJUnit4ClassRunner.java:248)
        at      at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)
        at      at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
        at      at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
        at      at
org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
        at      at
org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
        at      at
org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
        at      at
org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
        at      at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
        at      at
org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:62)
        at      at
org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:140)
        at      at
org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:127)
        at      at org.apache.maven.surefire.Surefire.run(Surefire.java:177)
        at      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at      at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:79)
        at      at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at      at java.lang.reflect.Method.invoke(Method.java:618)
        at      at
org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:345)
        at      at
org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:1009)
Caused by: java.io.EOFException
        at      at java.io.DataInputStream.readFully(DataInputStream.java:204)
        at      at java.io.DataInputStream.readInt(DataInputStream.java:380)
        at      at
org.apache.activemq.openwire.OpenWireFormat.unmarshal(OpenWireFormat.java:268)
        at      at
org.apache.activemq.transport.tcp.TcpTransport.readCommand(TcpTransport.java:192)
        at      at
org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:184)
        at      at
org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:172)
        at      at java.lang.Thread.run(Thread.java:810)



Now I'm very lost. Hoping someone can help me out.

Best regards
Espen


More information about the Logback-user mailing list