很方便的 Log 工具类
import android.util.Log;
public class LogUtil {
private static final String TAG = MyApplication.context.getString(R.string.app_name);
//debug版本是 BuildConfig.DEBUG = true
private static boolean isDebug = BuildConfig.DEBUG;
/**
* 写文件的锁对象
*/
private static final Object mLogLock = new Object();
/**
* 用于记时的变量
*/
private static long mTimestamp = 0;
private static final String LINE_CHAR = "=";
private static final int LENGTH = 80;
private static String LINE;
static {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < LENGTH; i++) {
sb.append(LINE_CHAR);
}
LINE = sb.toString();
}
private LogUtil() {
}
/**
* 把 Log 存储到文件中
*
* @param log 需要存储的日志
* @param path 存储路径
*/
public static void log2File(String log, String path) {
log2File(log, path, true);
}
/**
* 把 Log 存储到文件中
*
* @param log
* @param path
* @param append
*/
public static void log2File(String log, String path, boolean append) {
synchronized (mLogLock) {
FileUtil.writeFile(log + "\r\n", path, append);
}
}
/**
* 打印网络请求错误日志
*
* @param errorMsg
* @param errorCode
*/
private static void printHttpRequestLogError(String errorMsg, int errorCode) {
printLogError("OKHTTP", errorMsg, errorCode);
}
/**
* 打印 list
*
* @param list
* @param
*/
public static void printList(List list) {
if (list == null || list.size() < 1) {
return;
}
int size = list.size();
i("---begin---");
for (int i = 0; i < size; i++) {
i(i + ":" + list.get(i).toString());
}
i("---end---");
}
/**
* 打印 array
*
* @param array
* @param
*/
public static void printArray(T[] array) {
if (array == null || array.length < 1) {
return;
}
int length = array.length;
i("---begin---");
for (int i = 0; i < length; i++) {
i(i + ":" + array[i].toString());
}
i("---end---");
}
/**
* 以级别为 e 的形式输出 msg 信息,附带时间戳,用于输出一个时间段起始点
*
* @param msg
*/
public static void msgStartTime(String msg) {
mTimestamp = System.currentTimeMillis();
if (!TextUtils.isEmpty(msg)) {
e("[Started:" + mTimestamp + "]" + msg);
}
}
/**
* 以级别为 e 的形式输出 msg 信息,附带时间戳,用于输出一个时间段结束点
*
* @param msg
*/
public static void elapsed(String msg) {
long currentTime = System.currentTimeMillis();
long elapsedTime = currentTime - mTimestamp;
mTimestamp = currentTime;
e("[Elapsed:" + elapsedTime + "]" + msg);
}
/**
* 用法:LogUtil.v(msg);
*
* @param msg
*/
public static void v(String msg) {
v(TAG, msg);
}
/**
* 用法:LogUtil.v(tag, msg);
*
* @param tag
* @param msg
*/
public static void v(String tag, String msg) {
print(Log.VERBOSE, tag, msg);
}
/**
* 用法:LogUtil.v(MainActivity.this, msg);
*
* @param object
* @param msg
*/
public static void v(Object object, String msg) {
print(Log.VERBOSE, object.getClass().getSimpleName(), msg);
}
/**
* 用法:LogUtil.d(msg);
*
* @param msg
*/
public static void d(String msg) {
d(TAG, msg);
}
/**
* 用法:LogUtil.d(tag, msg);
*
* @param tag
* @param msg
*/
public static void d(String tag, String msg) {
print(Log.DEBUG, tag, msg);
}
/**
* 用法:LogUtil.d(MainActivity.this, msg);
*
* @param object
* @param msg
*/
public static void d(Object object, String msg) {
print(Log.DEBUG, object.getClass().getSimpleName(), msg);
}
/**
* 用法:LogUtil.i(msg);
*
* @param msg
*/
public static void i(String msg) {
i(TAG, msg);
}
/**
* 用法:LogUtil.i(tag, msg);
*
* @param tag
* @param msg
*/
public static void i(String tag, String msg) {
print(Log.INFO, tag, msg);
}
/**
* 用法:LogUtil.i(MainActivity.this, msg);
*
* @param object
* @param msg
*/
public static void i(Object object, String msg) {
print(Log.INFO, object.getClass().getSimpleName(), msg);
}
/**
* 用法:LogUtil.w(msg);
*
* @param msg
*/
public static void w(String msg) {
w(TAG, msg);
}
/**
* 用法:LogUtil.w(tag, msg);
*
* @param tag
* @param msg
*/
public static void w(String tag, String msg) {
print(Log.WARN, tag, msg);
}
/**
* 用法:LogUtil.w(MainActivity.this, msg);
*
* @param object
* @param msg
*/
public static void w(Object object, String msg) {
print(Log.WARN, object.getClass().getSimpleName(), msg);
}
/**
* 用法:LogUtil.e(msg);
*
* @param msg
*/
public static void e(String msg) {
e(TAG, msg);
}
/**
* 用法:LogUtil.e(tag, msg);
*
* @param tag
* @param msg
*/
public static void e(String tag, String msg) {
print(Log.ERROR, tag, msg);
}
/**
* 用法:LogUtil.e(MainActivity.this, msg);
*
* @param object
* @param msg
*/
public static void e(Object object, String msg) {
print(Log.ERROR, object.getClass().getSimpleName(), msg);
}
/** 以级别为 e 的形式输出Throwable */
public static void e(Throwable tr) {
e("", tr);
}
/** 以级别为 e 的形式输出Throwable */
public static void e(String msg, Throwable tr) {
print(Log.ERROR, TAG, msg, tr);
}
/**
* 用法:LogUtil.wtf(msg);
*
* @param msg
*/
public static void wtf(String msg) {
wtf(TAG, msg);
}
/**
* 用法:LogUtil.wtf(tag, msg);
*
* @param tag
* @param msg
*/
public static void wtf(String tag, String msg) {
print(Log.ASSERT, tag, msg);
}
/**
* 用法:LogUtil.wtf(MainActivity.this, msg);
*
* @param object
* @param msg
*/
public static void wtf(Object object, String msg) {
print(Log.ASSERT, object.getClass().getSimpleName(), msg);
}
/**
* 打印自定义 Log
*
* @param errorMsg
* @param errorCode
*/
public static void printLogError(String errorMsg, int errorCode) {
printLogError(TAG, errorMsg, errorCode);
}
/**
* 打印自定义 Log
*
* @param object
* @param errorMsg
* @param errorCode
*/
public static void printLogError(Object object, String errorMsg, int errorCode) {
printLogError(object.getClass().getSimpleName(), errorMsg, errorCode);
}
/**
* 打印自定义 Log
*
* @param tag
* @param errorMsg
* @param errorCode
*/
public static void printLogError(String tag, String errorMsg, int errorCode) {
e(tag, LINE);//start
e(tag, " 错误信息 ");
e(tag, LINE);//title
e(tag, " ");
e(tag, errorMsg);
e(tag, " ");
e(tag, "错误码: " + errorCode);
e(tag, " ");
e(tag, LINE);//end
}
/**
* 打印 Log
*
* @param level
* @param tag
* @param msg
*/
private static void print(int level, String tag, String msg) {
//不是 debug 模式,则关闭 Log 打印
if (!isDebug) {
return;
}
switch (level) {
case Log.VERBOSE:
Log.v(tag, msg);
break;
case Log.DEBUG:
Log.d(tag, msg);
break;
case Log.INFO:
Log.i(tag, msg);
break;
case Log.WARN:
Log.w(tag, msg);
break;
case Log.ERROR:
Log.e(tag, msg);
break;
case Log.ASSERT:
Log.wtf(tag, msg);
break;
}
}
/**
* 打印 Log
*
* @param level
* @param tag
* @param msg
* @param tr
*/
private static void print(int level, String tag, String msg, Throwable tr) {
//不是 debug 模式,则关闭 Log 打印
if (!isDebug) {
return;
}
switch (level) {
case Log.VERBOSE:
Log.v(tag, msg, tr);
break;
case Log.DEBUG:
Log.d(tag, msg, tr);
break;
case Log.INFO:
Log.i(tag, msg, tr);
break;
case Log.WARN:
Log.w(tag, msg, tr);
break;
case Log.ERROR:
Log.e(tag, msg, tr);
break;
case Log.ASSERT:
Log.wtf(tag, msg, tr);
break;
}
}
}