diff --git a/src/main/java/fr/doap/llog/Filter.java b/src/main/java/fr/doap/llog/Filter.java index 285ac7e..18626ee 100644 --- a/src/main/java/fr/doap/llog/Filter.java +++ b/src/main/java/fr/doap/llog/Filter.java @@ -1,6 +1,10 @@ package fr.doap.llog; public class Filter { + static public Filter DEFAULT = new Filter(L.INFO, L.ERROR); + + public Filter(int aL, int aS) { mLogLevel=aL; mSTLevel=aS; } + public int mLogLevel; public int mSTLevel; } diff --git a/src/main/java/fr/doap/llog/ILogger.java b/src/main/java/fr/doap/llog/ILogger.java index 7b21335..4ba5d13 100644 --- a/src/main/java/fr/doap/llog/ILogger.java +++ b/src/main/java/fr/doap/llog/ILogger.java @@ -1,6 +1,34 @@ package fr.doap.llog; public interface ILogger { + public void logHead(LogMsg aLogMsg, StackTraceElement aSTE); + public void logCauseHead(LogMsg aLogMsg, Throwable aThrowable); + public void logSTLine(LogMsg aLogMsg, StackTraceElement aSTE); + + final static public ILogger CONSOLE = new Console(); - public void log(LogMsg aLogMsg); -} + static public class Console implements ILogger { + @Override + public void logHead(LogMsg aLogMsg, StackTraceElement aSTE) { + String lC = aSTE.getClassName()+"."+aSTE.getMethodName(); + if (aLogMsg.mSeverity >= L.ERROR) System.err.println(aLogMsg.mTag+"/"+L.getSeverity(aLogMsg.mSeverity)+ " - " + lC + ": " + aLogMsg.mMessage + " (" + aSTE.getFileName() + ":" + aSTE.getLineNumber() + ")"); + else System.out.println(aLogMsg.mTag+"/"+L.getSeverity(aLogMsg.mSeverity)+ " - " + lC + ": " + aLogMsg.mMessage + " (" + aSTE.getFileName() + ":" + aSTE.getLineNumber() + ")"); + } + + @Override + public void logCauseHead(LogMsg aLogMsg, Throwable aThrowable) { + StackTraceElement lSTE = aThrowable.getStackTrace()[0]; + String lC = lSTE.getClassName() + "." + lSTE.getMethodName(); + String lMsg = aThrowable.getLocalizedMessage(); + if (aLogMsg.mSeverity >= L.ERROR) System.err.println("caused by " + lC + ": " + lMsg + " (" + lSTE.getFileName() + ":" + lSTE.getLineNumber() + ")"); + else System.out.println("caused by " + lC + ": " + lMsg + " (" + lSTE.getFileName() + ":" + lSTE.getLineNumber() + ")"); + } + + @Override + public void logSTLine(LogMsg aLogMsg, StackTraceElement aSTE) { + String lC = aSTE.getClassName()+"."+aSTE.getMethodName(); + if (aLogMsg.mSeverity >= L.ERROR) System.err.println(" called by "+lC + " (" + aSTE.getFileName() + ":" + aSTE.getLineNumber() + ")"); + else System.out.println(" called by "+lC + " (" + aSTE.getFileName() + ":" + aSTE.getLineNumber() + ")"); + } + } +} \ No newline at end of file diff --git a/src/main/java/fr/doap/llog/L.java b/src/main/java/fr/doap/llog/L.java index 44c2816..6954629 100644 --- a/src/main/java/fr/doap/llog/L.java +++ b/src/main/java/fr/doap/llog/L.java @@ -1,20 +1,42 @@ package fr.doap.llog; public class L { + static final public int ALL = 0; + static final public int TRACE = 100; + static final public int VERBOSE = 200; + static final public int DEBUG = 300; + static final public int INFO = 400; + static final public int CONFIG = 500; + static final public int WARN = 600; + static final public int ERROR = 700; + static final public int FATAL = 800; + static final public int OFF = 1000; - static private L mL = new L(); + static public void filter(String aKey, Filter aFilter) { + mLooper.put(aKey,aFilter); + } + + static public String getSeverity(int aSeverity) { + switch(aSeverity) { + case TRACE: return "TRACE"; + case VERBOSE: return "VERBOSE"; + case DEBUG: return "DEBUG"; + case CONFIG: return "CONFIG"; + case INFO: return "INFO"; + case WARN: return "WARN"; + case ERROR: return "ERROR"; + case FATAL: return "FATAL"; + } + return "?"; + } static public LogMsg l(int aSeverity, Throwable aThrowable, String aTag, String aMsg, Object ... aArgs) { String lMsg = aMsg; if (aArgs != null && aArgs.length > 0) lMsg = String.format(aMsg, aArgs); LogMsg lLogMsg = new LogMsg(aSeverity, aThrowable, aTag, lMsg); - mL.mLooper.post(lLogMsg); + mLooper.post(lLogMsg); return lLogMsg; } - - static public void filter(String aKey, Filter aFilter) { - mL.mLooper.put(aKey,aFilter); - } - private LogLooper mLooper = new LogLooper(); + static private LogLooper mLooper = new LogLooper(); } diff --git a/src/main/java/fr/doap/llog/LogLooper.java b/src/main/java/fr/doap/llog/LogLooper.java index b01678b..015cc4a 100644 --- a/src/main/java/fr/doap/llog/LogLooper.java +++ b/src/main/java/fr/doap/llog/LogLooper.java @@ -22,31 +22,40 @@ public class LogLooper extends ThreadLooper { String lClass = lS.getClassName(); lClass = lClass.substring(lClass.lastIndexOf('.')); if (mLogMsg.mTag == null || mLogMsg.mTag.isEmpty()) mLogMsg.mTag = lClass; + String lC = lS.getClassName() + "." + lS.getMethodName(); Filter lF = mFilters.get(lC); - if (lF != null) { - if (mLogMsg.mSeverity >= lF.mLogLevel) { - System.out.println(mLogMsg.mSeverity+ "-" + lC + ": " + mLogMsg.mMessage + " (" + lS.getFileName() + ":" + lS.getLineNumber() + ")"); - if (mLogMsg.mSeverity <= lF.mSTLevel) { - for (int i=lI+1; i= lF.mLogLevel) { + mLogger.logHead(mLogMsg, lS); + if (mLogMsg.mSeverity >= lF.mSTLevel) { + lShowST = true; + for (int i=lI+1; i mFilters = new Dict<>(); + private ILogger mLogger = ILogger.CONSOLE; } diff --git a/src/test/java/fr/doap/test/Test.java b/src/test/java/fr/doap/test/Test.java index 5437ef2..e2ff330 100644 --- a/src/test/java/fr/doap/test/Test.java +++ b/src/test/java/fr/doap/test/Test.java @@ -40,15 +40,12 @@ public class Test { } protected static void testFilter() { - Filter lF = new Filter(); - lF.mLogLevel = 3; - lF.mSTLevel = 5; + Filter lF = new Filter(L.DEBUG, L.WARN); L.filter("", lF); - L.l(10, null, "Dict", "Always show"); - L.l(6, null, "Dict", "Always show 6"); - L.l(5, null, "Dict", "Always with ST 5"); - L.l(3, null, "Dict", "Always with ST 3"); - L.l(2, null, "Dict", "Never show"); - L.l(100, null, "Dict", "Finished"); + L.l(L.ERROR, null, "Dict", "Always show with ST"); + L.l(L.INFO, null, "Dict", "Always show"); + L.l(L.DEBUG, null, "Dict", "Always"); + L.l(L.TRACE, null, "Dict", "Not showing"); + L.l(L.CONFIG, null, "Dict", "Finished"); } }