Configuring JMSQueueAppender to send messages to a Websphere MQ server

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

Hi Espen, this has nothing to do with logback. Your problem is that your MQ guy just gave you the "raw MQ credentials" (i.e. you'd have to create the ConnectionFactory and Queue object by yourself), but what logback needs is a JNDI-bound ConnectionFactory and Queue. If you have an application server at hand, the most easy way to solve this is to deploy the "IBM Websphere MQ resource adapter" in it and use the JNDI-bound objects from there. Here is a HOWTO for Jboss: http://www.ibm.com/developerworks/websphere/library/techarticles/0710_ritchi... hth, regards, christian! On Wed, Aug 25, 2010 at 4:28 PM, Espen Rydningen <espenrydningen@gmail.com> wrote:
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 _______________________________________________ Logback-user mailing list Logback-user@qos.ch http://qos.ch/mailman/listinfo/logback-user

After a heap of other projects I finally got time to solve this problem, and it was just as you stated Christian, the MQ guy gave me raw MQ details. After nagging him to set this properly up in the application server, the configuration was just this: <appender name="QUEUE" class="com.foo.bar.common.log.CustomJMSQueueAppender"> <QueueConnectionFactoryBindingName>jms/FooBarQF</QueueConnectionFactoryBindingName> <QueueBindingName>jms/FooBarQ</QueueBindingName> </appender> -Espen On Wed, Aug 25, 2010 at 4:56 PM, Christian Migowski <chrismfwrd@gmail.com>wrote:
Hi Espen,
this has nothing to do with logback. Your problem is that your MQ guy just gave you the "raw MQ credentials" (i.e. you'd have to create the ConnectionFactory and Queue object by yourself), but what logback needs is a JNDI-bound ConnectionFactory and Queue. If you have an application server at hand, the most easy way to solve this is to deploy the "IBM Websphere MQ resource adapter" in it and use the JNDI-bound objects from there. Here is a HOWTO for Jboss:
http://www.ibm.com/developerworks/websphere/library/techarticles/0710_ritchi...
hth, regards, christian!
On Wed, Aug 25, 2010 at 4:28 PM, Espen Rydningen <espenrydningen@gmail.com> wrote:
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 _______________________________________________ Logback-user mailing list Logback-user@qos.ch http://qos.ch/mailman/listinfo/logback-user
_______________________________________________ Logback-user mailing list Logback-user@qos.ch http://qos.ch/mailman/listinfo/logback-user
participants (2)
-
Christian Migowski
-
Espen Rydningen