From b3f14b545e03fc9e4c9756b79fc454e6816d39de Mon Sep 17 00:00:00 2001 From: Klemek Date: Sun, 2 Sep 2018 14:24:27 +0100 Subject: [PATCH] v1.3 : Throwable instead of Exception ang log cause --- README.md | 4 +- download/simple-logger-1.2.1.jar | Bin 5685 -> 0 bytes download/simple-logger-1.3.jar | Bin 0 -> 5771 bytes pom.xml | 2 +- src/main/java/fr/klemek/logger/Logger.java | 49 ++++++++++-------- .../java/fr/klemek/logger/LoggerTest.java | 26 +++++++++- 6 files changed, 54 insertions(+), 27 deletions(-) delete mode 100644 download/simple-logger-1.2.1.jar create mode 100644 download/simple-logger-1.3.jar diff --git a/README.md b/README.md index a826e0a..81e1f6b 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.2.1 +Current version v1.3 ## Download -* [simple-logger-1.2.1.jar](../../raw/master/download/simple-logger-1.2.1.jar) +* [simple-logger-1.3.jar](../../raw/master/download/simple-logger-1.3.jar) ## How to use diff --git a/download/simple-logger-1.2.1.jar b/download/simple-logger-1.2.1.jar deleted file mode 100644 index e1d58c2b4642480375de797071fb78fc532499f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5685 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 e4FvvA+$Wt2(Y|4b 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 literal 0 HcmV?d00001 diff --git a/pom.xml b/pom.xml index 50749ad..c08eb77 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ fr.klemek simple-logger - 1.2.1 + 1.3 SimpleLogger diff --git a/src/main/java/fr/klemek/logger/Logger.java b/src/main/java/fr/klemek/logger/Logger.java index 53896f2..8497eb7 100644 --- a/src/main/java/fr/klemek/logger/Logger.java +++ b/src/main/java/fr/klemek/logger/Logger.java @@ -16,12 +16,11 @@ import java.util.logging.SimpleFormatter; */ public final class Logger { + private static final int DEFAULT_DEPTH = 4; private static java.util.logging.Logger appLogger = java.util.logging.Logger.getLogger("Unknown"); private static String appName = "Unknown"; private static String basePackage = null; private static boolean initialized = false; - private static final int DEFAULT_DEPTH = 4; - private Logger() { @@ -79,13 +78,13 @@ public final class Logger { } LogManager.getLogManager().readConfiguration(is); - appName = Utils.getString(relativePath, "app_name","Unknown"); - basePackage = Utils.getString(relativePath, "default_package",null); - String outputFile = Utils.getString(relativePath, "output_file",null); + appName = Utils.getString(relativePath, "app_name", "Unknown"); + basePackage = Utils.getString(relativePath, "default_package", null); + String outputFile = Utils.getString(relativePath, "output_file", null); appLogger = java.util.logging.Logger.getLogger(appName); - if(outputFile != null){ + if (outputFile != null) { Handler handler = new FileHandler(outputFile, true); handler.setFormatter(new SimpleFormatter()); appLogger.addHandler(handler); @@ -101,7 +100,7 @@ public final class Logger { * * @param e the exception to log */ - public static void log(Exception e) { + public static void log(Throwable e) { Logger.log(Logger.DEFAULT_DEPTH, Level.SEVERE, e.toString(), e); } @@ -111,7 +110,7 @@ public final class Logger { * @param lvl the level of logging * @param e the exception to log */ - public static void log(Level lvl, Exception e) { + public static void log(Level lvl, Throwable e) { Logger.log(Logger.DEFAULT_DEPTH, lvl, e.toString(), e); } @@ -121,8 +120,8 @@ public final class Logger { * @param e the exception to log * @param msg the exception msg */ - public static void log(Exception e, String msg) { - Logger.log(Logger.DEFAULT_DEPTH, Level.SEVERE, msg + " : {0}", e); + public static void log(Throwable e, String msg) { + Logger.log(Logger.DEFAULT_DEPTH, Level.SEVERE, msg + ": {0}", e); } /** @@ -132,8 +131,8 @@ public final class Logger { * @param e the exception to log * @param msg the exception msg */ - public static void log(Level lvl, Exception e, String msg) { - Logger.log(Logger.DEFAULT_DEPTH, lvl, msg + " : {0}", e); + public static void log(Level lvl, Throwable e, String msg) { + Logger.log(Logger.DEFAULT_DEPTH, lvl, msg + ": {0}", e); } /** @@ -166,23 +165,29 @@ public final class Logger { * @param objects the object for the message formatting */ private static void log(int depth, Level lvl, String message, Object... objects) { - if(!initialized) { + if (!initialized) { initialized = true; Logger.log(Level.WARNING, "Logger was not initialized please do so before using."); } message = String.format("[%s-%s] %s", appName, Utils.getCallingClassName(depth), message); appLogger.log(lvl, message, objects); - if (lvl == Level.SEVERE && objects.length > 0 && objects[0] instanceof Exception) { - boolean inPackage = false; - for (StackTraceElement ste : ((Exception) objects[0]).getStackTrace()) { - Logger.log(depth + 1, Level.SEVERE, "\t {0}", ste); - if(Logger.basePackage != null){ - if (!inPackage && ste.getClassName().startsWith(Logger.basePackage)) - inPackage = true; - else if (inPackage && !ste.getClassName().startsWith(Logger.basePackage)) - break; + if (objects.length > 0 && objects[0] instanceof Throwable) { + Throwable throwable = (Throwable) objects[0]; + if (lvl == Level.SEVERE) { + boolean inPackage = false; + for (StackTraceElement ste : throwable.getStackTrace()) { + Logger.log(depth + 1, Level.SEVERE, "\t {0}", ste); + if (Logger.basePackage != null) { + if (!inPackage && ste.getClassName().startsWith(Logger.basePackage)) + inPackage = true; + else if (inPackage && !ste.getClassName().startsWith(Logger.basePackage)) + break; + } } } + if (throwable.getCause() != null) + Logger.log(depth + 1, lvl, "Caused by: {0}", throwable.getCause()); } + } } diff --git a/src/test/java/fr/klemek/logger/LoggerTest.java b/src/test/java/fr/klemek/logger/LoggerTest.java index 612cf48..37942a4 100644 --- a/src/test/java/fr/klemek/logger/LoggerTest.java +++ b/src/test/java/fr/klemek/logger/LoggerTest.java @@ -75,7 +75,7 @@ public class LoggerTest { 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] 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)" }); @@ -93,7 +93,29 @@ public class LoggerTest { 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" + "[WARNING][Test-LoggerTest] custom message: java.lang.Exception: custom exception" + }); + } + + @Test + public void testLogExceptionCause() { + Logger.log(new Exception("custom exception", new Exception("custom cause"))); + verifyOutput(new String[]{ + "[SEVERE][Test-LoggerTest] java.lang.Exception: custom exception", + "[SEVERE][Test-LoggerTest] \t fr.klemek.logger.LoggerTest.testLogExceptionCause(LoggerTest.java:102)", + "[SEVERE][Test-LoggerTest] \t sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)", + "[SEVERE][Test-LoggerTest] Caused by: java.lang.Exception: custom cause", + "[SEVERE][Test-LoggerTest] \t fr.klemek.logger.LoggerTest.testLogExceptionCause(LoggerTest.java:102)", + "[SEVERE][Test-LoggerTest] \t sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)" + }); + } + + @Test + public void testLogExceptionCauseCustomLevel() { + Logger.log(Level.WARNING, new Exception("custom exception", new Exception("custom cause"))); + verifyOutput(new String[]{ + "[WARNING][Test-LoggerTest] java.lang.Exception: custom exception", + "[WARNING][Test-LoggerTest] Caused by: java.lang.Exception: custom cause", }); }