From 0d1111852bc1fc0021dd4e8fa7675c790da0f049 Mon Sep 17 00:00:00 2001 From: Klemek Date: Thu, 30 Aug 2018 13:59:39 +0100 Subject: [PATCH] v1.2 Fix + Logger tests --- README.md | 6 +- download/simple-logger-1.1.jar | Bin 5684 -> 5682 bytes src/main/java/fr/klemek/logger/Logger.java | 3 +- .../java/fr/klemek/logger/LoggerTest.java | 139 ++++++++++++++++-- src/test/resources/logging.properties | 2 +- 5 files changed, 134 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 259fd0d..5666ba7 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,11 @@ # Simple Logger A simple but useful Java logger to use everywhere. -Current version v1.1 +Current version v1.2 ## Download -* [simple-logger-1.1.jar](../../raw/master/download/simple-logger-1.1.jar) +* [simple-logger-1.2.jar](../../raw/master/download/simple-logger-1.2.jar) ## How to use @@ -85,7 +85,7 @@ You can use this project as a maven dependency with this : fr.klemek simple-logger - 1.1 + 1.2 ``` diff --git a/download/simple-logger-1.1.jar b/download/simple-logger-1.1.jar index 639681639d1403018a88b1c11822b2786d5f9f6b..3e4649b91a721398049559fa8064099facac485f 100644 GIT binary patch delta 2564 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 a1e3TGEdme{lc5wTlMogj2F?-y0000wCd&!{ delta 2538 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 A5&!@I diff --git a/src/main/java/fr/klemek/logger/Logger.java b/src/main/java/fr/klemek/logger/Logger.java index b28c90f..e48ee70 100644 --- a/src/main/java/fr/klemek/logger/Logger.java +++ b/src/main/java/fr/klemek/logger/Logger.java @@ -1,6 +1,5 @@ package fr.klemek.logger; -import java.io.File; import java.io.IOException; import java.io.InputStream; import java.util.Locale; @@ -89,7 +88,7 @@ public final class Logger { if(outputFile != null){ Handler handler = new FileHandler(outputFile, true); handler.setFormatter(new SimpleFormatter()); - appLogger.addHandler(new FileHandler(outputFile, true)); + appLogger.addHandler(handler); } } catch (IOException e) { diff --git a/src/test/java/fr/klemek/logger/LoggerTest.java b/src/test/java/fr/klemek/logger/LoggerTest.java index 19a5126..612cf48 100644 --- a/src/test/java/fr/klemek/logger/LoggerTest.java +++ b/src/test/java/fr/klemek/logger/LoggerTest.java @@ -1,25 +1,144 @@ package fr.klemek.logger; +import java.io.BufferedReader; import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.io.PrintWriter; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.logging.Level; import org.junit.Before; -import org.junit.BeforeClass; import org.junit.Test; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; + public class LoggerTest { - private static File output = new File("output.log"); - - @Test - public void test() { - Logger.log("message"); - } + private static Path output = new File("output.log").toPath(); @Before - public void setUp() { + public void setUp() throws IOException { + if (Files.exists(output)) { + PrintWriter writer = new PrintWriter(output.toFile()); + writer.print(""); + writer.close(); + } Logger.init("logging.properties"); - if(output.exists()) - output.delete(); + } + + @Test + public void testLog() { + Logger.log("message"); + verifyOutput(new String[]{ + "[INFO][Test-LoggerTest] message" + }); + } + + @Test + public void testLogParams() { + Logger.log("message {2} {0}", "abc", 123, 456f); + verifyOutput(new String[]{ + "[INFO][Test-LoggerTest] message 456 abc" + }); + } + + @Test + public void testLogCustomLevel() { + Logger.log(Level.WARNING, "message"); + verifyOutput(new String[]{ + "[WARNING][Test-LoggerTest] message" + }); + } + + @Test + public void testLogCustomLevelParams() { + Logger.log(Level.WARNING, "message {2} {0}", "abc", 123, 456f); + verifyOutput(new String[]{ + "[WARNING][Test-LoggerTest] message 456 abc" + }); + } + + @Test + public void testLogException() { + Logger.log(new Exception("custom exception")); + verifyOutput(new String[]{ + "[SEVERE][Test-LoggerTest] java.lang.Exception: custom exception", + "[SEVERE][Test-LoggerTest] \t fr.klemek.logger.LoggerTest.testLogException(LoggerTest.java:66)", + "[SEVERE][Test-LoggerTest] \t sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)" + }); + } + + @Test + public void testLogExceptionMessage() { + Logger.log(new Exception("custom exception"), "custom message"); + verifyOutput(new String[]{ + "[SEVERE][Test-LoggerTest] custom message : java.lang.Exception: custom exception", + "[SEVERE][Test-LoggerTest] \t fr.klemek.logger.LoggerTest.testLogExceptionMessage(LoggerTest.java:76)", + "[SEVERE][Test-LoggerTest] \t sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)" + }); + } + + @Test + public void testLogExceptionCustomLevel() { + Logger.log(Level.WARNING, new Exception("custom exception")); + verifyOutput(new String[]{ + "[WARNING][Test-LoggerTest] java.lang.Exception: custom exception" + }); + } + + @Test + public void testLogExceptionCustomLevelCustomMessage() { + Logger.log(Level.WARNING, new Exception("custom exception"), "custom message"); + verifyOutput(new String[]{ + "[WARNING][Test-LoggerTest] custom message : java.lang.Exception: custom exception" + }); + } + + @Test + public void testSetLevel() { + assertEquals(Level.INFO, Logger.getLevel()); + + Logger.log(Level.INFO, "message1"); + Logger.log(Level.WARNING, "message2"); + + Logger.setLevel(Level.WARNING); + assertEquals(Level.WARNING, Logger.getLevel()); + + Logger.log(Level.INFO, "message3"); + Logger.log(Level.WARNING, "message4"); + + verifyOutput(new String[]{ + "[INFO][Test-LoggerTest] message1", + "[WARNING][Test-LoggerTest] message2", + "[WARNING][Test-LoggerTest] message4", + }); + } + + private void verifyOutput(String[] expected) { + try (FileReader freader = new FileReader(output.toFile())) { + try (BufferedReader reader = new BufferedReader(freader)) { + int i = 0; + String line; + while ((line = reader.readLine()) != null) { + line = line.trim(); + if (line.length() > 0) { + if (i >= expected.length) { + fail("Too much lines in output file"); + return; + } + assertEquals(expected[i++], line); + } + } + if (i < expected.length) + fail("Not enough lines in output file"); + } + } catch (IOException e) { + e.printStackTrace(); + fail("error when accessing output file"); + } } } \ No newline at end of file diff --git a/src/test/resources/logging.properties b/src/test/resources/logging.properties index 638f9a0..51b56e0 100644 --- a/src/test/resources/logging.properties +++ b/src/test/resources/logging.properties @@ -4,7 +4,7 @@ handlers=java.util.logging.ConsoleHandler java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter #Customize date/time shown with this line -java.util.logging.SimpleFormatter.format=[%1$tF %1$tT][%4$s]%5$s %n +java.util.logging.SimpleFormatter.format=[%4$s]%5$s %n #Specify your app name here app_name=Test