[logback-user] Configuring JMSQueueAppender to send messages to a Websphere MQ server
Christian Migowski
chrismfwrd at gmail.com
Wed Aug 25 16:56:02 CEST 2010
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_ritchie/0710_ritchie.html
hth,
regards,
christian!
On Wed, Aug 25, 2010 at 4:28 PM, Espen Rydningen
<espenrydningen at 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 at qos.ch
> http://qos.ch/mailman/listinfo/logback-user
>
More information about the Logback-user
mailing list