From 82a14c4e11cd22a24a337966a757152d07fa28fc Mon Sep 17 00:00:00 2001 From: Frankie Wu Date: Fri, 13 Jul 2012 13:56:36 +0800 Subject: [PATCH] fix another bug within log4j appender --- .../com/dianping/cat/log4j/CatAppender.java | 22 +++++++--- .../dianping/cat/{message => }/AllTests.java | 16 +++++--- .../dianping/cat/log4j/CatAppenderTest.java | 41 +++++++++++++++++++ 3 files changed, 68 insertions(+), 11 deletions(-) rename cat-core/src/test/java/com/dianping/cat/{message => }/AllTests.java (80%) create mode 100644 cat-core/src/test/java/com/dianping/cat/log4j/CatAppenderTest.java diff --git a/cat-core/src/main/java/com/dianping/cat/log4j/CatAppender.java b/cat-core/src/main/java/com/dianping/cat/log4j/CatAppender.java index 27b277f93..f3e9b4655 100644 --- a/cat-core/src/main/java/com/dianping/cat/log4j/CatAppender.java +++ b/cat-core/src/main/java/com/dianping/cat/log4j/CatAppender.java @@ -6,6 +6,10 @@ import org.apache.log4j.spi.LoggingEvent; import org.apache.log4j.spi.ThrowableInformation; import com.dianping.cat.Cat; +import com.dianping.cat.message.Message; +import com.dianping.cat.message.MessageProducer; +import com.dianping.cat.message.Transaction; +import com.dianping.cat.message.spi.MessageTree; public class CatAppender extends AppenderSkeleton { @Override @@ -14,12 +18,18 @@ public class CatAppender extends AppenderSkeleton { ThrowableInformation throwableInformation = event.getThrowableInformation(); if (throwableInformation != null) { - if (Cat.getManager().getThreadLocalMessageTree() != null) { - Cat.getProducer().logError(throwableInformation.getThrowable()); -// } else { -// Cat.setup(null); -// Cat.getProducer().logError(throwableInformation.getThrowable()); -// Cat.reset(); + MessageProducer cat = Cat.getProducer(); + Throwable exception = throwableInformation.getThrowable(); + MessageTree tree = Cat.getManager().getThreadLocalMessageTree(); + + if (tree == null) { + Transaction t = cat.newTransaction("System", "Log4jException"); + + cat.logError(exception); + t.setStatus(Message.SUCCESS); + t.complete(); + } else { + cat.logError(exception); } } } diff --git a/cat-core/src/test/java/com/dianping/cat/message/AllTests.java b/cat-core/src/test/java/com/dianping/cat/AllTests.java similarity index 80% rename from cat-core/src/test/java/com/dianping/cat/message/AllTests.java rename to cat-core/src/test/java/com/dianping/cat/AllTests.java index 82b978d6e..09c074bac 100644 --- a/cat-core/src/test/java/com/dianping/cat/message/AllTests.java +++ b/cat-core/src/test/java/com/dianping/cat/AllTests.java @@ -1,10 +1,13 @@ -package com.dianping.cat.message; +package com.dianping.cat; import org.junit.runner.RunWith; import org.junit.runners.Suite; import org.junit.runners.Suite.SuiteClasses; -import com.dianping.cat.CatTest; +import com.dianping.cat.log4j.CatAppenderTest; +import com.dianping.cat.message.EventTest; +import com.dianping.cat.message.HeartbeatTest; +import com.dianping.cat.message.TransactionTest; import com.dianping.cat.message.configuration.ClientConfigTest; import com.dianping.cat.message.internal.MessageIdFactoryTest; import com.dianping.cat.message.internal.MillisSecondTimerTest; @@ -19,9 +22,14 @@ import com.dianping.cat.storage.report.LocalReportBucketTest; @RunWith(Suite.class) @SuiteClasses({ -CatTest.class, /* */ +CatTest.class, + +/* .log4j */ +CatAppenderTest.class, + +/* .message */ EventTest.class, HeartbeatTest.class, @@ -34,8 +42,6 @@ ClientConfigTest.class, /* .internal */ MessageIdFactoryTest.class, -//MessageProducerTest.class, - MillisSecondTimerTest.class, /* .io */ diff --git a/cat-core/src/test/java/com/dianping/cat/log4j/CatAppenderTest.java b/cat-core/src/test/java/com/dianping/cat/log4j/CatAppenderTest.java new file mode 100644 index 000000000..983f4cb11 --- /dev/null +++ b/cat-core/src/test/java/com/dianping/cat/log4j/CatAppenderTest.java @@ -0,0 +1,41 @@ +package com.dianping.cat.log4j; + +import org.apache.log4j.Category; +import org.apache.log4j.Level; +import org.apache.log4j.Logger; +import org.apache.log4j.spi.LoggingEvent; +import org.junit.Test; + +import com.dianping.cat.Cat; +import com.dianping.cat.message.Message; +import com.dianping.cat.message.Transaction; + +public class CatAppenderTest { + @Test + public void testWithTransaction() throws InterruptedException { + CatAppender appender = new CatAppender(); + Throwable throwable = new Exception(); + Category logger = Logger.getLogger(CatAppenderTest.class); + LoggingEvent event = new LoggingEvent("test", logger, Level.ERROR, null, throwable); + Transaction t = Cat.getProducer().newTransaction("Test", "test"); + + appender.append(event); + + t.setStatus(Message.SUCCESS); + t.complete(); + + Thread.sleep(20); + } + + @Test + public void testWithoutTransaction() throws InterruptedException { + CatAppender appender = new CatAppender(); + Throwable throwable = new Exception(); + Category logger = Logger.getLogger(CatAppenderTest.class); + LoggingEvent event = new LoggingEvent("test", logger, Level.ERROR, null, throwable); + + appender.append(event); + + Thread.sleep(10); + } +} -- GitLab