[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