Update 1
This commit is contained in:
parent
52a93601dd
commit
378f785535
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
|
||||
public void log(LogMsg aLogMsg);
|
||||
final static public ILogger CONSOLE = new Console();
|
||||
|
||||
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() + ")");
|
||||
}
|
||||
}
|
||||
}
|
@ -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();
|
||||
}
|
||||
|
@ -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 (lF == null) lF = Filter.DEFAULT;
|
||||
boolean lShowST = false;
|
||||
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() + ")");
|
||||
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;
|
||||
}
|
||||
|
@ -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");
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user