From 23a8d6fb22cf4383cb4d5ce500b85dbb67feb7c9 Mon Sep 17 00:00:00 2001 From: schnatterer Date: Fri, 9 Jun 2017 21:00:25 +0200 Subject: [PATCH 01/19] Updated hamcrest to a version available on maven central --- java/logback-spike/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/logback-spike/pom.xml b/java/logback-spike/pom.xml index f32f7fc..11ba95a 100644 --- a/java/logback-spike/pom.xml +++ b/java/logback-spike/pom.xml @@ -34,7 +34,7 @@ org.hamcrest hamcrest-all - 1.2 + 1.3 From 8759c1b86d4a00096a65a8fbbaa610256869bf3f Mon Sep 17 00:00:00 2001 From: schnatterer Date: Sat, 10 Jun 2017 09:24:43 +0200 Subject: [PATCH 02/19] LogbackCapturingAppender: Implemeted storing of multiple messages, get logging events --- .../spikes/LogbackCapturingAppender.java | 20 +++++--- .../spikes/LogbackCapturingAppenderTest.java | 47 ++++++++++++++++--- .../thekua/spikes/OurDomainWithLogger.java | 10 +++- 3 files changed, 62 insertions(+), 15 deletions(-) rename java/logback-spike/src/{test => main}/java/com/thekua/spikes/LogbackCapturingAppender.java (76%) rename java/logback-spike/src/{main => test}/java/com/thekua/spikes/OurDomainWithLogger.java (52%) diff --git a/java/logback-spike/src/test/java/com/thekua/spikes/LogbackCapturingAppender.java b/java/logback-spike/src/main/java/com/thekua/spikes/LogbackCapturingAppender.java similarity index 76% rename from java/logback-spike/src/test/java/com/thekua/spikes/LogbackCapturingAppender.java rename to java/logback-spike/src/main/java/com/thekua/spikes/LogbackCapturingAppender.java index 9af6810..c957f8a 100644 --- a/java/logback-spike/src/test/java/com/thekua/spikes/LogbackCapturingAppender.java +++ b/java/logback-spike/src/main/java/com/thekua/spikes/LogbackCapturingAppender.java @@ -1,6 +1,5 @@ package com.thekua.spikes; - import ch.qos.logback.classic.Level; import ch.qos.logback.classic.Logger; import ch.qos.logback.classic.spi.ILoggingEvent; @@ -8,6 +7,7 @@ import ch.qos.logback.core.AppenderBase; import java.util.ArrayList; +import java.util.LinkedList; import java.util.List; public class LogbackCapturingAppender extends AppenderBase { @@ -20,17 +20,15 @@ public static LogbackCapturingAppender weaveInto(org.slf4j.Logger sl4jLogger) { return appender; } - public static void cleanUp() { for (LogbackCapturingAppender appender : ALL) { appender.cleanUp(); } } - } private final Logger logger; - private ILoggingEvent captured; + private List capturedEvents = new LinkedList(); public LogbackCapturingAppender(org.slf4j.Logger sl4jLogger) { this.logger = (Logger) sl4jLogger; @@ -54,13 +52,21 @@ private void connect(Logger logger) { this.start(); } - public String getCapturedLogMessage() { - return captured.getMessage(); + public List getCapturedEvents() { + return capturedEvents; + } + + public List getCapturedLogMessages() { + List capturedMessages = new LinkedList(); + for (ILoggingEvent capturedEvent : capturedEvents) { + capturedMessages.add(capturedEvent.getFormattedMessage()); + } + return capturedMessages; } @Override protected void append(ILoggingEvent iLoggingEvent) { - captured = iLoggingEvent; + capturedEvents.add(iLoggingEvent); } private void cleanUp() { diff --git a/java/logback-spike/src/test/java/com/thekua/spikes/LogbackCapturingAppenderTest.java b/java/logback-spike/src/test/java/com/thekua/spikes/LogbackCapturingAppenderTest.java index 45b1d6b..7d90a98 100644 --- a/java/logback-spike/src/test/java/com/thekua/spikes/LogbackCapturingAppenderTest.java +++ b/java/logback-spike/src/test/java/com/thekua/spikes/LogbackCapturingAppenderTest.java @@ -1,10 +1,11 @@ package com.thekua.spikes; +import ch.qos.logback.classic.Level; import org.junit.After; import org.junit.Test; -import static org.hamcrest.Matchers.is; +import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; public class LogbackCapturingAppenderTest { @@ -14,30 +15,62 @@ public void cleanUp() { } @Test - public void shouldCaptureAGivenLog() throws Exception { + public void shouldCaptureAGivenLogMessage() throws Exception { // Given LogbackCapturingAppender capturing = LogbackCapturingAppender.Factory.weaveInto(OurDomainWithLogger.LOG); OurDomainWithLogger domainClass = new OurDomainWithLogger(); // when - domainClass.logThis("This should be logged"); + domainClass.logInfo("This should be logged{}", "!"); // then - assertThat(capturing.getCapturedLogMessage(), is("This should be logged")); + assertThat(capturing.getCapturedLogMessages().get(0), is("This should be logged!")); } + @Test + public void shouldCaptureMultipleLogMessages() throws Exception { + // Given, when + LogbackCapturingAppender capturing = sendMultipleFormattedMessages(); + + // then + assertThat(capturing.getCapturedLogMessages().get(0), is("This should be logged!")); + assertThat(capturing.getCapturedLogMessages().get(1), is("This should also be logged")); + } + + @Test + public void shouldCaptureMultipleLogEvents() throws Exception { + LogbackCapturingAppender capturing = sendMultipleFormattedMessages(); + + // then + assertThat(capturing.getCapturedEvents().get(0).getLevel(), is(Level.INFO)); + assertThat(capturing.getCapturedEvents().get(1).getLevel(), is(Level.WARN)); + } + + @Test public void shouldNotCaptureAGiveLogAfterCleanUp() throws Exception { // Given LogbackCapturingAppender capturing = LogbackCapturingAppender.Factory.weaveInto(OurDomainWithLogger.LOG); OurDomainWithLogger domainClass = new OurDomainWithLogger(); - domainClass.logThis("This should be logged at info"); + domainClass.logInfo("This should be logged at info"); LogbackCapturingAppender.Factory.cleanUp(); // when - domainClass.logThis("This should not be logged"); + domainClass.logInfo("This should not be logged"); // then - assertThat(capturing.getCapturedLogMessage(), is("This should be logged at info")); + assertThat(capturing.getCapturedLogMessages().get(0), is("This should be logged at info")); } + + private LogbackCapturingAppender sendMultipleFormattedMessages() { + // Given + LogbackCapturingAppender capturing = LogbackCapturingAppender.Factory.weaveInto(OurDomainWithLogger.LOG); + OurDomainWithLogger domainClass = new OurDomainWithLogger(); + + // when + domainClass.logInfo("This should be logged{}", "!"); + domainClass.logWarn("This should also be logged"); + return capturing; + } + } diff --git a/java/logback-spike/src/main/java/com/thekua/spikes/OurDomainWithLogger.java b/java/logback-spike/src/test/java/com/thekua/spikes/OurDomainWithLogger.java similarity index 52% rename from java/logback-spike/src/main/java/com/thekua/spikes/OurDomainWithLogger.java rename to java/logback-spike/src/test/java/com/thekua/spikes/OurDomainWithLogger.java index 785ac6b..6d52f76 100644 --- a/java/logback-spike/src/main/java/com/thekua/spikes/OurDomainWithLogger.java +++ b/java/logback-spike/src/test/java/com/thekua/spikes/OurDomainWithLogger.java @@ -8,8 +8,16 @@ public class OurDomainWithLogger { static Logger LOG = LoggerFactory.getLogger(OurDomainWithLogger.class); - public void logThis(String message) { + public void logInfo(String message) { LOG.info(message); } + public void logWarn(String message) { + LOG.warn(message); + } + + public void logInfo(String message, Object... args) { + LOG.info(message, args); + } + } From d5acc313d7c843b236a74f93c019c5c14aeada82 Mon Sep 17 00:00:00 2001 From: schnatterer Date: Sat, 10 Jun 2017 09:25:37 +0200 Subject: [PATCH 03/19] LogbackCapturingAppender: Applied Best pratices - private constructor for factory, static final constants. --- .../main/java/com/thekua/spikes/LogbackCapturingAppender.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/java/logback-spike/src/main/java/com/thekua/spikes/LogbackCapturingAppender.java b/java/logback-spike/src/main/java/com/thekua/spikes/LogbackCapturingAppender.java index c957f8a..630955a 100644 --- a/java/logback-spike/src/main/java/com/thekua/spikes/LogbackCapturingAppender.java +++ b/java/logback-spike/src/main/java/com/thekua/spikes/LogbackCapturingAppender.java @@ -12,7 +12,9 @@ public class LogbackCapturingAppender extends AppenderBase { public static class Factory { - private static List ALL = new ArrayList(); + private static final List ALL = new ArrayList(); + + private Factory() {} public static LogbackCapturingAppender weaveInto(org.slf4j.Logger sl4jLogger) { LogbackCapturingAppender appender = new LogbackCapturingAppender(sl4jLogger); From 140fef1e33164f8d918ffdea1e39edbe67414895 Mon Sep 17 00:00:00 2001 From: schnatterer Date: Sat, 10 Jun 2017 09:26:54 +0200 Subject: [PATCH 04/19] Added readme --- java/logback-spike/README.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 java/logback-spike/README.md diff --git a/java/logback-spike/README.md b/java/logback-spike/README.md new file mode 100644 index 0000000..ad17b36 --- /dev/null +++ b/java/logback-spike/README.md @@ -0,0 +1,3 @@ +# Logback-spike + +See this [blog post](https://www.thekua.com/atwork/2011/11/testing-logging-with-logback/). \ No newline at end of file From 72289f0cc4c13218facf83edc9e5691c341e63a3 Mon Sep 17 00:00:00 2001 From: schnatterer Date: Wed, 14 Jun 2017 18:14:12 +0200 Subject: [PATCH 05/19] Updated .gitignore for intelliJ and Maven --- java/.gitignore | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/java/.gitignore b/java/.gitignore index 7df3665..b805e20 100644 --- a/java/.gitignore +++ b/java/.gitignore @@ -1,5 +1,23 @@ -*.class -*.ipr -*.iws -*.iml -target +# Created by .ignore support plugin (hsz.mobi) +### JetBrains template +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +.idea + + +### Maven template +target/ +pom.xml.tag +pom.xml.releaseBackup +pom.xml.versionsBackup +pom.xml.next +release.properties +dependency-reduced-pom.xml +buildNumber.properties +.mvn/timing.properties + +# Avoid ignoring Maven wrapper jar file (.jar files are usually ignored) +!/.mvn/wrapper/maven-wrapper.jar + + From b1889aa2d8f89b0cdcef0074dae2655444e61f9b Mon Sep 17 00:00:00 2001 From: schnatterer Date: Wed, 14 Jun 2017 18:16:51 +0200 Subject: [PATCH 06/19] Made Logback-spike a top level project --- java/.gitignore => .gitignore | 1 + java/logback-spike/LICENSE => LICENSE | 0 java/logback-spike/README.md => README.md | 2 +- java/logback-spike/pom.xml => pom.xml | 0 .../main/java/com/thekua/spikes/LogbackCapturingAppender.java | 0 .../java/com/thekua/spikes/LogbackCapturingAppenderTest.java | 0 .../test/java/com/thekua/spikes/OurDomainWithLogger.java | 0 7 files changed, 2 insertions(+), 1 deletion(-) rename java/.gitignore => .gitignore (98%) rename java/logback-spike/LICENSE => LICENSE (100%) rename java/logback-spike/README.md => README.md (85%) rename java/logback-spike/pom.xml => pom.xml (100%) rename {java/logback-spike/src => src}/main/java/com/thekua/spikes/LogbackCapturingAppender.java (100%) rename {java/logback-spike/src => src}/test/java/com/thekua/spikes/LogbackCapturingAppenderTest.java (100%) rename {java/logback-spike/src => src}/test/java/com/thekua/spikes/OurDomainWithLogger.java (100%) diff --git a/java/.gitignore b/.gitignore similarity index 98% rename from java/.gitignore rename to .gitignore index b805e20..1eeeb0c 100644 --- a/java/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 .idea +*.iml ### Maven template diff --git a/java/logback-spike/LICENSE b/LICENSE similarity index 100% rename from java/logback-spike/LICENSE rename to LICENSE diff --git a/java/logback-spike/README.md b/README.md similarity index 85% rename from java/logback-spike/README.md rename to README.md index ad17b36..a4c90bc 100644 --- a/java/logback-spike/README.md +++ b/README.md @@ -1,3 +1,3 @@ -# Logback-spike +# logback-spike See this [blog post](https://www.thekua.com/atwork/2011/11/testing-logging-with-logback/). \ No newline at end of file diff --git a/java/logback-spike/pom.xml b/pom.xml similarity index 100% rename from java/logback-spike/pom.xml rename to pom.xml diff --git a/java/logback-spike/src/main/java/com/thekua/spikes/LogbackCapturingAppender.java b/src/main/java/com/thekua/spikes/LogbackCapturingAppender.java similarity index 100% rename from java/logback-spike/src/main/java/com/thekua/spikes/LogbackCapturingAppender.java rename to src/main/java/com/thekua/spikes/LogbackCapturingAppender.java diff --git a/java/logback-spike/src/test/java/com/thekua/spikes/LogbackCapturingAppenderTest.java b/src/test/java/com/thekua/spikes/LogbackCapturingAppenderTest.java similarity index 100% rename from java/logback-spike/src/test/java/com/thekua/spikes/LogbackCapturingAppenderTest.java rename to src/test/java/com/thekua/spikes/LogbackCapturingAppenderTest.java diff --git a/java/logback-spike/src/test/java/com/thekua/spikes/OurDomainWithLogger.java b/src/test/java/com/thekua/spikes/OurDomainWithLogger.java similarity index 100% rename from java/logback-spike/src/test/java/com/thekua/spikes/OurDomainWithLogger.java rename to src/test/java/com/thekua/spikes/OurDomainWithLogger.java From 8e0b80546d91f0c00d9eef95ac4a5926e8667b53 Mon Sep 17 00:00:00 2001 From: schnatterer Date: Wed, 14 Jun 2017 18:29:39 +0200 Subject: [PATCH 07/19] Pom.xml: Updated Logback & JUnit versions --- pom.xml | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/pom.xml b/pom.xml index 11ba95a..5b45740 100644 --- a/pom.xml +++ b/pom.xml @@ -8,27 +8,21 @@ jar logback-spike - http://maven.apache.org UTF-8 - - org.slf4j - slf4j-api - 1.6.2 - ch.qos.logback logback-classic - 1.0.0 + 1.2.3 junit - junit-dep - 4.8.2 + junit + 4.12 test From b0c2b89729aeb7c723b68db01e0418d4cbd8dce0 Mon Sep 17 00:00:00 2001 From: schnatterer Date: Wed, 14 Jun 2017 18:30:15 +0200 Subject: [PATCH 08/19] Pom.xml: Fixed hamcrest scope. Its a test dependency! --- pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/pom.xml b/pom.xml index 5b45740..3b02640 100644 --- a/pom.xml +++ b/pom.xml @@ -29,6 +29,7 @@ org.hamcrest hamcrest-all 1.3 + test From 5a7316ba23de064619646640661f45a73807b906 Mon Sep 17 00:00:00 2001 From: schnatterer Date: Wed, 14 Jun 2017 18:30:40 +0200 Subject: [PATCH 09/19] Pom.xml: Prepared for semantic versioning. --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 3b02640..940292f 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.thekua.spikes logback-spike - 1.0-SNAPSHOT + 1.0.0-SNAPSHOT jar logback-spike From fdc0447f3dcb0c5ceec8760a5a509ef377b14ed5 Mon Sep 17 00:00:00 2001 From: schnatterer Date: Wed, 14 Jun 2017 22:30:13 +0200 Subject: [PATCH 10/19] Simplified API of LogbackCapturingAppender and added javadoc --- .../spikes/LogbackCapturingAppender.java | 92 ++++++++++++------- .../spikes/LogbackCapturingAppenderTest.java | 10 +- 2 files changed, 62 insertions(+), 40 deletions(-) diff --git a/src/main/java/com/thekua/spikes/LogbackCapturingAppender.java b/src/main/java/com/thekua/spikes/LogbackCapturingAppender.java index 630955a..f7270ab 100644 --- a/src/main/java/com/thekua/spikes/LogbackCapturingAppender.java +++ b/src/main/java/com/thekua/spikes/LogbackCapturingAppender.java @@ -10,54 +10,59 @@ import java.util.LinkedList; import java.util.List; +/** + * Logback appender that simply stores all logged messages of an {@link org.slf4j.Logger} in memory and provides methods + * to retrieve them, so they can be used in asserts of unit tests. + *
+ * Add a logger like so
+ * {@code LogbackCapturingAppender capturing = LogbackCapturingAppender.weaveInto(OurDomainWithLogger.LOG); } + *

+ * Retrieve any log messages using any of the following methods: + *
    + *
  • {@link #getCapturedEvents()}
  • + *
  • {@link #getCapturedLogMessages()}
  • + *
+ *
+ * If necessary remove appender instance or all {@link LogbackCapturingAppender}s using + * + *
    + *
  • {@link #cleanUp()}
  • + *
  • {@link #cleanUpAll()}
  • + *
+ */ public class LogbackCapturingAppender extends AppenderBase { - public static class Factory { - private static final List ALL = new ArrayList(); - - private Factory() {} - - public static LogbackCapturingAppender weaveInto(org.slf4j.Logger sl4jLogger) { - LogbackCapturingAppender appender = new LogbackCapturingAppender(sl4jLogger); - ALL.add(appender); - return appender; - } - - public static void cleanUp() { - for (LogbackCapturingAppender appender : ALL) { - appender.cleanUp(); - } - } - } + private static final List ALL = new ArrayList(); private final Logger logger; - private List capturedEvents = new LinkedList(); - public LogbackCapturingAppender(org.slf4j.Logger sl4jLogger) { - this.logger = (Logger) sl4jLogger; - connect(logger); - detachDefaultConsoleAppender(); - } + private List capturedEvents = new LinkedList(); - private void detachDefaultConsoleAppender() { - Logger rootLogger = getRootLogger(); - Appender consoleAppender = rootLogger.getAppender("console"); - rootLogger.detachAppender(consoleAppender); + public static LogbackCapturingAppender weaveInto(org.slf4j.Logger sl4jLogger) { + LogbackCapturingAppender appender = new LogbackCapturingAppender(sl4jLogger); + ALL.add(appender); + return appender; } - private Logger getRootLogger() { - return logger.getLoggerContext().getLogger("ROOT"); + public static void cleanUpAll() { + for (LogbackCapturingAppender appender : ALL) { + appender.cleanUp(); + } } - private void connect(Logger logger) { - logger.setLevel(Level.ALL); - logger.addAppender(this); - this.start(); + public void cleanUp() { + logger.detachAppender(this); } + /** + * @return whole event, including log level, unformatted message, etc. + */ public List getCapturedEvents() { return capturedEvents; } + /** + * @return formatted message strings + */ public List getCapturedLogMessages() { List capturedMessages = new LinkedList(); for (ILoggingEvent capturedEvent : capturedEvents) { @@ -71,8 +76,25 @@ protected void append(ILoggingEvent iLoggingEvent) { capturedEvents.add(iLoggingEvent); } - private void cleanUp() { - logger.detachAppender(this); + private LogbackCapturingAppender(org.slf4j.Logger sl4jLogger) { + this.logger = (Logger) sl4jLogger; + connect(logger); + detachDefaultConsoleAppender(); + } + private void detachDefaultConsoleAppender() { + Logger rootLogger = getRootLogger(); + Appender consoleAppender = rootLogger.getAppender("console"); + rootLogger.detachAppender(consoleAppender); + } + + private Logger getRootLogger() { + return logger.getLoggerContext().getLogger("ROOT"); + } + + private void connect(Logger logger) { + logger.setLevel(Level.ALL); + logger.addAppender(this); + this.start(); } } diff --git a/src/test/java/com/thekua/spikes/LogbackCapturingAppenderTest.java b/src/test/java/com/thekua/spikes/LogbackCapturingAppenderTest.java index 7d90a98..0e7510f 100644 --- a/src/test/java/com/thekua/spikes/LogbackCapturingAppenderTest.java +++ b/src/test/java/com/thekua/spikes/LogbackCapturingAppenderTest.java @@ -11,13 +11,13 @@ public class LogbackCapturingAppenderTest { @After public void cleanUp() { - LogbackCapturingAppender.Factory.cleanUp(); + LogbackCapturingAppender.cleanUpAll(); } @Test public void shouldCaptureAGivenLogMessage() throws Exception { // Given - LogbackCapturingAppender capturing = LogbackCapturingAppender.Factory.weaveInto(OurDomainWithLogger.LOG); + LogbackCapturingAppender capturing = LogbackCapturingAppender.weaveInto(OurDomainWithLogger.LOG); OurDomainWithLogger domainClass = new OurDomainWithLogger(); // when @@ -50,10 +50,10 @@ public void shouldCaptureMultipleLogEvents() throws Exception { @Test public void shouldNotCaptureAGiveLogAfterCleanUp() throws Exception { // Given - LogbackCapturingAppender capturing = LogbackCapturingAppender.Factory.weaveInto(OurDomainWithLogger.LOG); + LogbackCapturingAppender capturing = LogbackCapturingAppender.weaveInto(OurDomainWithLogger.LOG); OurDomainWithLogger domainClass = new OurDomainWithLogger(); domainClass.logInfo("This should be logged at info"); - LogbackCapturingAppender.Factory.cleanUp(); + LogbackCapturingAppender.cleanUpAll(); // when domainClass.logInfo("This should not be logged"); @@ -64,7 +64,7 @@ public void shouldNotCaptureAGiveLogAfterCleanUp() throws Exception { private LogbackCapturingAppender sendMultipleFormattedMessages() { // Given - LogbackCapturingAppender capturing = LogbackCapturingAppender.Factory.weaveInto(OurDomainWithLogger.LOG); + LogbackCapturingAppender capturing = LogbackCapturingAppender.weaveInto(OurDomainWithLogger.LOG); OurDomainWithLogger domainClass = new OurDomainWithLogger(); // when From 6da24273134e84d48cd70bc53ebeabf7e4d94421 Mon Sep 17 00:00:00 2001 From: schnatterer Date: Wed, 14 Jun 2017 22:37:31 +0200 Subject: [PATCH 11/19] Added minimal .travis.yml --- .travis.yml | 1 + 1 file changed, 1 insertion(+) create mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..f5c99a7 --- /dev/null +++ b/.travis.yml @@ -0,0 +1 @@ +language: java \ No newline at end of file From 8e2fa82a6f17bd5f893bd9f6c1a508753aaf6a50 Mon Sep 17 00:00:00 2001 From: schnatterer Date: Wed, 14 Jun 2017 22:41:41 +0200 Subject: [PATCH 12/19] Readme: Added usage section --- README.md | 41 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index a4c90bc..3f47710 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,42 @@ # logback-spike -See this [blog post](https://www.thekua.com/atwork/2011/11/testing-logging-with-logback/). \ No newline at end of file +Logback and SLF4j unit testing. + +Original idea from [thekua's blog](https://www.thekua.com/atwork/2011/11/testing-logging-with-logback/), forked from [his repo](https://github.com/thekua/Sample-Code/tree/master/java/logback-spike) in order to provide it conveniently with good reuse as maven dependency. + +## Usage + +Add the following maven repository to your POM.xml + +```xml + + + jitpack.io + https://jitpack.io + + +``` + +Then add the actual dependency + +```xml + + com.github.schnatterer + logback-spike + 1.0.0 + test + +``` + +From here it's really simple to use: +````java +// Given +LogbackCapturingAppender capturing = LogbackCapturingAppender.weaveInto(OurDomainWithLogger.LOG); + +// when +new OurDomainWithLogger().logInfo("This should be logged{}", "!"); + +// then +assertThat(capturing.getCapturedLogMessages().get(0), is("This should be logged!")); +```` +See [LogbackCapturingAppender's javadoc](src/main/java/com/thekua/spikes/LogbackCapturingAppender.java) and [its unit test](src/test/java/com/thekua/spikes/LogbackCapturingAppenderTest.java) for more insights. \ No newline at end of file From ca37118858ad35bc479ecef36f19e3222bb1bf65 Mon Sep 17 00:00:00 2001 From: schnatterer Date: Wed, 14 Jun 2017 22:44:53 +0200 Subject: [PATCH 13/19] Readme: Added Travis and license Badge --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 3f47710..28f7f4d 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,6 @@ # logback-spike +[![Build Status](https://travis-ci.org/schnatterer/logback-spike.svg?branch=master)](https://travis-ci.org/schnatterer/logback-spike) +[![License](https://img.shields.io/github/license/schnatterer/logback-spike.svg)](LICENSE) Logback and SLF4j unit testing. @@ -39,4 +41,4 @@ new OurDomainWithLogger().logInfo("This should be logged{}", "!"); // then assertThat(capturing.getCapturedLogMessages().get(0), is("This should be logged!")); ```` -See [LogbackCapturingAppender's javadoc](src/main/java/com/thekua/spikes/LogbackCapturingAppender.java) and [its unit test](src/test/java/com/thekua/spikes/LogbackCapturingAppenderTest.java) for more insights. \ No newline at end of file +See [LogbackCapturingAppender's javadoc](src/main/java/com/thekua/spikes/LogbackCapturingAppender.java) and [its unit test](src/test/java/com/thekua/spikes/LogbackCapturingAppenderTest.java) for more insights. From 0ef89a30dc3f0aaf09e7e8e92e5a41f690e79672 Mon Sep 17 00:00:00 2001 From: schnatterer Date: Wed, 14 Jun 2017 22:51:27 +0200 Subject: [PATCH 14/19] Pom.xml add SCM Tag --- pom.xml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pom.xml b/pom.xml index 940292f..c5cde1a 100644 --- a/pom.xml +++ b/pom.xml @@ -13,6 +13,12 @@ UTF-8 + + scm:git:git@github.com:schnatterer/logback-spike.git + scm:git:git@github.com:schnatterer/logback-spike.git + https://github.com/schnatterer/logback-spike + + ch.qos.logback From cd524709d4458dcce09e9784d3fe0b148f5b71b4 Mon Sep 17 00:00:00 2001 From: schnatterer Date: Wed, 14 Jun 2017 23:00:27 +0200 Subject: [PATCH 15/19] Bump version 1.0 --- pom.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index c5cde1a..0c48c32 100644 --- a/pom.xml +++ b/pom.xml @@ -1,10 +1,9 @@ - + 4.0.0 com.thekua.spikes logback-spike - 1.0.0-SNAPSHOT + 1.0.0 jar logback-spike @@ -17,7 +16,8 @@ scm:git:git@github.com:schnatterer/logback-spike.git scm:git:git@github.com:schnatterer/logback-spike.git https://github.com/schnatterer/logback-spike - + 1.0.0 + From a6b2feb82ef472f08ab814c2d21e9253ca8f7849 Mon Sep 17 00:00:00 2001 From: schnatterer Date: Wed, 14 Jun 2017 23:01:13 +0200 Subject: [PATCH 16/19] Prepare next development iteration --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 0c48c32..c63d9c4 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.thekua.spikes logback-spike - 1.0.0 + 1.0.1-SNAPSHOT jar logback-spike @@ -16,7 +16,7 @@ scm:git:git@github.com:schnatterer/logback-spike.git scm:git:git@github.com:schnatterer/logback-spike.git https://github.com/schnatterer/logback-spike - 1.0.0 + HEAD From f242d429828a6edb446f52c62ff70aa20a5ee7b9 Mon Sep 17 00:00:00 2001 From: schnatterer Date: Wed, 14 Jun 2017 23:04:51 +0200 Subject: [PATCH 17/19] Readme added JitPack link and badge --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 28f7f4d..a2feddc 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,6 @@ # logback-spike [![Build Status](https://travis-ci.org/schnatterer/logback-spike.svg?branch=master)](https://travis-ci.org/schnatterer/logback-spike) +[![JitPack](https://jitpack.io/v/schnatterer/logback-spike.svg)](https://jitpack.io/#schnatterer/logback-spike) [![License](https://img.shields.io/github/license/schnatterer/logback-spike.svg)](LICENSE) Logback and SLF4j unit testing. @@ -8,6 +9,8 @@ Original idea from [thekua's blog](https://www.thekua.com/atwork/2011/11/testing ## Usage +Get it via [JitPack](https://jitpack.io/#schnatterer/logback-spike), for example using maven. + Add the following maven repository to your POM.xml ```xml From a6394859f33420b57a55228aafa05c3fd2b8ad55 Mon Sep 17 00:00:00 2001 From: schnatterer Date: Wed, 12 Jul 2017 18:55:32 +0200 Subject: [PATCH 18/19] LICENSE: Adapted to reflect history and current project. --- LICENSE | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/LICENSE b/LICENSE index f4a67ed..2d7d2c7 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,7 @@ MIT License -Copyright (c) 2016 Patrick Kua +Copyright for portions of this project are held by Patrick Kua, 2016 as part of project thekua/Sample-Code. +All other copyright for project schnatterer/logback-spike are held by Johannes Schnatterer, 2017. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal From 77fefabc2ec8562830e4022f3d0a59d22e867076 Mon Sep 17 00:00:00 2001 From: schnatterer Date: Wed, 12 Jul 2017 19:00:30 +0200 Subject: [PATCH 19/19] LICENSE: Reformatted. Hoping GitHub will recognize it as MIT. --- LICENSE | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/LICENSE b/LICENSE index 2d7d2c7..2625adb 100644 --- a/LICENSE +++ b/LICENSE @@ -1,7 +1,6 @@ MIT License -Copyright for portions of this project are held by Patrick Kua, 2016 as part of project thekua/Sample-Code. -All other copyright for project schnatterer/logback-spike are held by Johannes Schnatterer, 2017. +Copyright for portions of this project are held by Patrick Kua, 2016 as part of project thekua/Sample-Code. All other copyright for project schnatterer/logback-spike are held by Johannes Schnatterer, 2017. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal