package cn.alphabets.light.log;
import android.util.Log;
import cn.alphabets.light.setting.Default;
/**
* 统一的日志处理
* Created by lin on 14/11/30.
*/
public final class Logger {
private static final int CALLER_COUNT = 3;
private static int logLevel = Default.LogLevel();
private Logger() {
}
/**
* Send a VERBOSE log message.
* @param msg The message you would like logged.
* @return The number of bytes written.
*/
public static int v(java.lang.String msg) {
if (logLevel < Log.VERBOSE) {
return 0;
}
return Log.v(Default.LogTag, format(msg));
}
public static int v(java.lang.String tag, java.lang.String msg) {
if (logLevel < Log.VERBOSE) {
return 0;
}
return Log.v(tag, format(msg));
}
/**
* Send a DEBUG log message.
* @param msg The message you would like logged.
* @return The number of bytes written.
*/
public static int d(java.lang.String msg) {
if (logLevel > Log.DEBUG) {
return 0;
}
return Log.d(Default.LogTag, format(msg));
}
public static int d(java.lang.String tag, java.lang.String msg) {
if (logLevel > Log.DEBUG) {
return 0;
}
return Log.d(tag, format(msg));
}
/**
* Send a INFO log message.
* @param msg The message you would like logged.
* @return The number of bytes written.
*/
public static int i(java.lang.String msg) {
if (logLevel > Log.INFO) {
return 0;
}
return Log.i(Default.LogTag, msg);
}
public static int i(java.lang.String tag, java.lang.String msg) {
if (logLevel > Log.INFO) {
return 0;
}
return Log.i(tag, format(msg));
}
/**
* Send a WARN log message.
* @param msg The message you would like logged.
* @return The number of bytes written.
*/
public static int w(java.lang.String msg) {
if (logLevel > Log.WARN) {
return 0;
}
return w(Default.LogTag, msg);
}
public static int w(java.lang.String tag, java.lang.String msg) {
if (logLevel > Log.WARN) {
return 0;
}
return Log.w(tag, format(msg));
}
/**
* Send a ERROR log message.
* @param msg The message you would like logged.
* @return The number of bytes written.
*/
public static int e(java.lang.String msg) {
if (logLevel > Log.ERROR) {
return 0;
}
return Log.e(Default.LogTag, msg);
}
public static int e(java.lang.String tag, java.lang.String msg) {
if (logLevel > Log.ERROR) {
return 0;
}
return Log.e(tag, format(msg));
}
public static int e(Exception e) {
if (logLevel > Log.ERROR) {
return 0;
}
String message = e.getMessage() == null ? e.toString() : e.getMessage();
return Log.e(Default.LogTag, message);
}
public static int e(java.lang.String tag, Exception e) {
if (logLevel > Log.ERROR) {
return 0;
}
String message = e.getMessage() == null ? e.toString() : e.getMessage();
return Log.e(tag, message);
}
/**
* 格式化消息
* @param msg
* @return
*/
private static String format(String msg) {
return String.format("%s#%s[%03d] - %s",
getClassName(CALLER_COUNT),
getFunctionName(CALLER_COUNT),
getLineNumber(CALLER_COUNT), msg);
}
/**
* 获取调用端类名
* @return 类名
*/
private static String getClassName(int call) {
String fn = "";
try {
fn = new Throwable().getStackTrace()[call].getClassName();
} catch (Exception e) {
}
return fn;
}
/**
* 获取调用端方法名
* @return 方法名
*/
private static String getFunctionName(int callCount) {
String fn = "";
try {
fn = new Throwable().getStackTrace()[callCount].getMethodName();
} catch (Exception e) {
}
return fn;
}
/**
* 获取调用端方法名
* @return 方法名
*/
private static int getLineNumber(int callCount) {
int fn = 0;
try {
fn = new Throwable().getStackTrace()[callCount].getLineNumber();
} catch (Exception e) {
}
return fn;
}
}