This commit is contained in:
Olivier Duval 2021-02-11 14:37:22 +01:00
parent 52a93601dd
commit 378f785535
5 changed files with 94 additions and 34 deletions

View File

@ -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;
}

View File

@ -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() + ")");
}
}
}

View File

@ -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();
}

View File

@ -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<mLogMsg.mSTE.length; i++) {
StackTraceElement l = mLogMsg.mSTE[i];
System.out.println(" "+l.getClassName() + "." + l.getMethodName() + " (" + l.getFileName() + ":" + l.getLineNumber() + ")");
}
}
if (lF == null) lF = Filter.DEFAULT;
boolean lShowST = false;
if (mLogMsg.mSeverity >= lF.mLogLevel) {
mLogger.logHead(mLogMsg, lS);
if (mLogMsg.mSeverity >= lF.mSTLevel) {
lShowST = true;
for (int i=lI+1; i<mLogMsg.mSTE.length; i++) mLogger.logSTLine(mLogMsg, mLogMsg.mSTE[i]);
}
}
if (mLogMsg.mThrowable != null) printLog(mLogMsg.mThrowable, lF, lShowST);
}
protected void printLog(Throwable aThrowable, Filter aFilter, boolean aShowST) {
StackTraceElement[] lSTEs = aThrowable.getStackTrace();
StackTraceElement lSTE = lSTEs[0];
String lClass = lSTE.getClassName();
lClass = lClass.substring(lClass.lastIndexOf('.'));
String lC = lSTE.getClassName() + "." + lSTE.getMethodName();
String lMsg = aThrowable.getLocalizedMessage();
if (aFilter != null) {
mLogger.logCauseHead(mLogMsg, aThrowable);
if (aShowST) for (int i=1; i<lSTEs.length; i++) mLogger.logSTLine(mLogMsg, lSTEs[i]);
} else {
System.out.println(lS.getClassName() + "." + lS.getMethodName() + ": " + mLogMsg.mMessage + " (" + lS.getFileName() + ":" + lS.getLineNumber() + ")");
System.out.println("caused by " + lC + ": " + lMsg + " (" + lSTE.getFileName() + ":" + lSTE.getLineNumber() + ")");
}
/*
for (int i=mLogMsg.getCallerIndex(); i<mLogMsg.mSTE.length; i++) {
StackTraceElement lS = mLogMsg.mSTE[i];
System.out.println(lS.getClassName() + "." + lS.getMethodName() + ": " + mLogMsg.mMessage + " (" + lS.getFileName() + ":" + lS.getLineNumber() + ")");
}
*/
if (aThrowable.getCause() != null) printLog(aThrowable.getCause(), aFilter, aShowST);
}
private LogMsg mLogMsg;
}
private Dict<Filter> mFilters = new Dict<>();
private ILogger mLogger = ILogger.CONSOLE;
}

View File

@ -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");
}
}