Hi,
I have a simple Java application which uses log4j with AmqpAppender.
The log4j configuration :
Code:log4j.rootCategory=INFO, stdout log4j.logger.in.loggersample.main.MainApplication=INFO, amqp log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - <%m>%n #log4j.appender.stdout.layout.ConversionPattern=%-5p %8t [%40.40c{4}]: %m%n log4j.category.in.gov.uidai.main=DEBUG log4j.appender.amqp=org.springframework.amqp.rabbit.log4j.AmqpAppender log4j.appender.amqp.layout=org.apache.log4j.PatternLayout log4j.appender.amqp.layout.ConversionPattern=%d %p %t [%c] - <%m> #------------------------------- ## Connection settings #------------------------------- log4j.appender.amqp.host=localhost log4j.appender.amqp.port=5672 log4j.appender.amqp.username=guest log4j.appender.amqp.password=guest log4j.appender.amqp.virtualHost=/ #log4j.appender.amqp.connectionTimeout=0 # No setter for connection timeout. #------------------------------- ## Exchange name and type #------------------------------- log4j.appender.amqp.exchangeName=app.log4j.log4 log4j.appender.amqp.exchangeType=fanout #------------------------------- ## Log4J-format pattern to use to create a routing key. ## The application id is available as %X{applicationId}. #------------------------------- log4j.appender.amqp.routingKeyPattern=INFO #------------------------------- ## Whether or not to declare this configured exchange #------------------------------- log4j.appender.amqp.declareExchange=true #------------------------------- ## Message properties #------------------------------- log4j.appender.amqp.contentType=text/plain log4j.appender.amqp.contentEncoding=null #------------------------------- ## Sender configuration #------------------------------- log4j.appender.amqp.senderPoolSize=2 log4j.appender.amqp.maxSenderRetries=30 log4j.appender.amqp.applicationId=log4j-sample-2Am using a fanout exchange,routingKeyPattern=INFO for testing purpose. The problem is that even after the "finished!!!" gets printed on the console. The application is not exiting. i can see 4 threads in the thread dump which are still running.Code:package in.loggersample.main; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; public class MainApplication { public static Log logger = LogFactory.getLog(MainApplication.class); public static void main(String[] args) { logger.info("Testing Logger"); System.out.println("Finished!!!"); } }
Code:"pool-2-thread-2" prio=6 tid=0x01c3dc00 nid=0x454 waiting on condition [0x18bef000] java.lang.Thread.State: WAITING (parking) at sun.misc.Unsafe.park(Native Method) - parking to wait for <0x0925d560> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) at java.util.concurrent.locks.LockSupport.park(Unknown Source) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(Unknown Source) at java.util.concurrent.LinkedBlockingQueue.take(Unknown Source) at org.springframework.amqp.rabbit.log4j.AmqpAppender$EventSender.run(AmqpAppender.java:417) at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source) at java.util.concurrent.FutureTask.run(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source) Locked ownable synchronizers: - <0x041d94b8> (a java.util.concurrent.locks.ReentrantLock$NonfairSync) "pool-2-thread-1" prio=6 tid=0x01c3d800 nid=0x1ee8 waiting on condition [0x18b9f000] java.lang.Thread.State: WAITING (parking) at sun.misc.Unsafe.park(Native Method) - parking to wait for <0x0925d560> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) at java.util.concurrent.locks.LockSupport.park(Unknown Source) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(Unknown Source) at java.util.concurrent.LinkedBlockingQueue.take(Unknown Source) at org.springframework.amqp.rabbit.log4j.AmqpAppender$EventSender.run(AmqpAppender.java:417) at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source) at java.util.concurrent.FutureTask.run(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source) Locked ownable synchronizers: - <0x041d9558> (a java.util.concurrent.locks.ReentrantLock$NonfairSync) "AMQP Connection 127.0.0.1:5672" prio=6 tid=0x01c3d000 nid=0x1b80 runnable [0x18b4f000] java.lang.Thread.State: RUNNABLE at java.net.SocketInputStream.socketRead0(Native Method) at java.net.SocketInputStream.read(Unknown Source) at java.io.BufferedInputStream.fill(Unknown Source) at java.io.BufferedInputStream.read(Unknown Source) - locked <0x041d2410> (a java.io.BufferedInputStream) at java.io.DataInputStream.readUnsignedByte(Unknown Source) at com.rabbitmq.client.impl.Frame.readFrom(Frame.java:95) at com.rabbitmq.client.impl.SocketFrameHandler.readFrame(SocketFrameHandler.java:131) - locked <0x041d2430> (a java.io.DataInputStream) at com.rabbitmq.client.impl.AMQConnection$MainLoop.run(AMQConnection.java:501) Locked ownable synchronizers: - None "log-event-retry-delay" daemon prio=6 tid=0x01c3cc00 nid=0x1a88 in Object.wait() [0x189ff000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0x092504e0> (a java.util.TaskQueue) at java.lang.Object.wait(Object.java:485) at java.util.TimerThread.mainLoop(Unknown Source) - locked <0x092504e0> (a java.util.TaskQueue) at java.util.TimerThread.run(Unknown Source) Locked ownable synchronizers: - None


Reply With Quote
