]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-7031 fix Logger.warn(String, Throwable) not logging exception 679/head
authorSébastien Lesaint <sebastien.lesaint@sonarsource.com>
Thu, 3 Dec 2015 17:03:12 +0000 (18:03 +0100)
committerSébastien Lesaint <sebastien.lesaint@sonarsource.com>
Mon, 7 Dec 2015 09:44:26 +0000 (10:44 +0100)
sonar-plugin-api/src/main/java/org/sonar/api/utils/log/BaseLogger.java
sonar-plugin-api/src/main/java/org/sonar/api/utils/log/ConsoleLogger.java
sonar-plugin-api/src/main/java/org/sonar/api/utils/log/LogbackLogger.java
sonar-plugin-api/src/test/java/org/sonar/api/utils/log/ConsoleLoggerTest.java
sonar-plugin-api/src/test/java/org/sonar/api/utils/log/LogbackLoggerTest.java

index 3c19cc5c673465acb57e01f90c2e93b7f41b9a7e..3bb30155d9b6e7158d7cd42e099a673596a4f2cf 100644 (file)
@@ -103,7 +103,7 @@ abstract class BaseLogger implements Logger {
   @Override
   public void warn(String msg, Throwable throwable) {
     LogInterceptors.get().log(LoggerLevel.WARN, msg, throwable);
-    doWarn(msg);
+    doWarn(msg, throwable);
   }
 
   @Override
@@ -180,6 +180,8 @@ abstract class BaseLogger implements Logger {
 
   abstract void doWarn(String msg);
 
+  abstract void doWarn(String msg, Throwable thrown);
+
   abstract void doWarn(String msg, @Nullable Object arg);
 
   abstract void doWarn(String msg, @Nullable Object arg1, @Nullable Object arg2);
index d58401ed2fc862dacdb3ab7e141a77ddfe2a2cc2..672e26f3ac992ded7a38f44bc3f640e57b74fead 100644 (file)
@@ -134,6 +134,12 @@ class ConsoleLogger extends BaseLogger {
     log("WARN ", msg);
   }
 
+  @Override
+  void doWarn(String msg, Throwable thrown) {
+    doWarn(msg);
+    thrown.printStackTrace();
+  }
+
   @Override
   protected void doWarn(String pattern, @Nullable Object arg) {
     warn(format(pattern, arg));
index 8675a94c5e1b05a6987e5cdd079a20089286b617..1f2516de3437903a3d1d2bbae0fab32a3101308a 100644 (file)
@@ -110,6 +110,11 @@ class LogbackLogger extends BaseLogger {
     logback.warn(msg);
   }
 
+  @Override
+  void doWarn(String msg, Throwable thrown) {
+    logback.warn(msg, thrown);
+  }
+
   @Override
   protected void doWarn(String msg, @Nullable Object arg) {
     logback.warn(msg, arg);
index 920f73e49481f968b7bc21033d42e64aab52a9cc..7150ffbccabe7a1596c77c6d35fce40891512d82 100644 (file)
@@ -22,6 +22,7 @@ package org.sonar.api.utils.log;
 import java.io.PrintStream;
 import org.junit.Rule;
 import org.junit.Test;
+import org.mockito.ArgumentCaptor;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.mockito.Mockito.anyString;
@@ -87,20 +88,33 @@ public class ConsoleLoggerTest {
   }
 
   @Test
-  public void log() {
+  public void log_info() {
     underTest.info("message");
     underTest.info("message {}", "foo");
     underTest.info("message {} {}", "foo", "bar");
     underTest.info("message {} {} {}", "foo", "bar", "baz");
     verify(stream, times(4)).println(startsWith("INFO "));
+  }
+
+  @Test
+  public void log_warn() {
+    Throwable throwable = mock(Throwable.class);
 
     underTest.warn("message");
     underTest.warn("message {}", "foo");
     underTest.warn("message {} {}", "foo", "bar");
     underTest.warn("message {} {} {}", "foo", "bar", "baz");
-    underTest.warn("message", new IllegalArgumentException());
-    verify(stream, times(5)).println(startsWith("WARN "));
+    underTest.warn("message", throwable);
+    ArgumentCaptor<String> captor = ArgumentCaptor.forClass(String.class);
+    verify(stream, times(5)).println(captor.capture());
+    for (String msg : captor.getAllValues()) {
+      assertThat(msg).startsWith("WARN ");
+    }
+    verify(throwable).printStackTrace();
+  }
 
+  @Test
+  public void log_error() {
     underTest.error("message");
     underTest.error("message {}", "foo");
     underTest.error("message {} {}", "foo", "bar");
index 9061d4296924eb8921c220825a63ebb975f19aa1..c250496324e3767dde19f466c405bc55762b26ba 100644 (file)
@@ -56,6 +56,7 @@ public class LogbackLoggerTest {
     underTest.warn("message {}", "foo");
     underTest.warn("message {} {}", "foo", "bar");
     underTest.warn("message {} {} {}", "foo", "bar", "baz");
+    underTest.warn("message", new NullPointerException("boom!"));
 
     underTest.error("message");
     underTest.error("message {}", "foo");