package com.martin.simpledevelop.utils.log;
import java.util.Calendar;
import java.util.Locale;
import android.content.Context;
import android.util.Log;
/**
* @Description Log工具类 d e i种打印 Log功能默认关闭。 <br>
* @File SaLogUtils.java
* @Package com.martin.simpledevelop.utils.log
* @Date 2015年6月26日上午1:22:25
* @Author Donghongyu 1358506549@qq.com
* @Version v1.0.0
*/
public class SaLogUtils {
/** debug开关. */
public static boolean D = true;
/** info开关. */
public static boolean I = true;
/** error开关. */
public static boolean E = true;
/** 起始执行时间. */
public static long startLogTimeInMillis = 0;
/**
* debug日志
*
* @param tag
* @param message
*/
public static void d(String tag, String message) {
if (D)
Log.d(tag, message);
}
/**
* debug日志
*
* @param clazz
* @param format
* @param args
*/
public static void d(String tag, String format, Object... args) {
d(tag, buildMessage(format, args));
}
/**
* debug日志
*
* @param context
* @param message
*/
public static void d(Context context, String message) {
String tag = context.getClass().getSimpleName();
d(tag, message);
}
/**
* debug日志
*
* @param clazz
* @param message
*/
public static void d(Class<?> clazz, String message) {
String tag = clazz.getSimpleName();
d(tag, message);
}
/**
* debug日志
*
* @param context
* @param format
* @param args
*/
public static void d(Context context, String format, Object... args) {
String tag = context.getClass().getSimpleName();
d(tag, buildMessage(format, args));
}
/**
* debug日志
*
* @param clazz
* @param format
* @param args
*/
public static void d(Class<?> clazz, String format, Object... args) {
String tag = clazz.getSimpleName();
d(tag, buildMessage(format, args));
}
/**
* info日志
*
* @param tag
* @param message
*/
public static void i(String tag, String message) {
Log.i(tag, message);
}
/**
* info日志
*
* @param context
* @param message
*/
public static void i(Context context, String message) {
String tag = context.getClass().getSimpleName();
i(tag, message);
}
/**
* info日志
*
* @param clazz
* @param message
*/
public static void i(Class<?> clazz, String message) {
String tag = clazz.getSimpleName();
i(tag, message);
}
/**
* info日志
*
* @param context
* @param format
* @param args
*/
public static void i(Context context, String format, Object... args) {
String tag = context.getClass().getSimpleName();
i(tag, buildMessage(format, args));
}
/**
* info日志
*
* @param clazz
* @param format
* @param args
*/
public static void i(Class<?> clazz, String format, Object... args) {
String tag = clazz.getSimpleName();
i(tag, buildMessage(format, args));
}
/**
* error日志
*
* @param tag
* @param message
*/
public static void e(String tag, String message) {
if (E)
Log.e(tag, message);
}
/**
* error日志
*
* @param tag
* @param format
* @param args
*/
public static void e(String tag, String format, Object... args) {
e(tag, buildMessage(format, args));
}
/**
* error日志
*
* @param context
* @param message
*/
public static void e(Context context, String message) {
String tag = context.getClass().getSimpleName();
e(tag, message);
}
/**
* error日志
*
* @param clazz
* @param message
*/
public static void e(Class<?> clazz, String message) {
String tag = clazz.getSimpleName();
e(tag, message);
}
/**
* error日志
*
* @param context
* @param format
* @param args
*/
public static void e(Context context, String format, Object... args) {
String tag = context.getClass().getSimpleName();
e(tag, buildMessage(format, args));
}
/**
* error日志
*
* @param clazz
* @param format
* @param args
*/
public static void e(Class<?> clazz, String format, Object... args) {
String tag = clazz.getSimpleName();
e(tag, buildMessage(format, args));
}
/**
* 描述:记录当前时间毫秒.
*
*/
public static void prepareLog(String tag) {
Calendar current = Calendar.getInstance();
startLogTimeInMillis = current.getTimeInMillis();
Log.d(tag, "日志计时开始:" + startLogTimeInMillis);
}
/**
* 描述:记录当前时间毫秒.
*
*/
public static void prepareLog(Context context) {
String tag = context.getClass().getSimpleName();
prepareLog(tag);
}
/**
* 描述:记录当前时间毫秒.
*
*/
public static void prepareLog(Class<?> clazz) {
String tag = clazz.getSimpleName();
prepareLog(tag);
}
/**
* 描述:打印这次的执行时间毫秒,需要首先调用prepareLog().
*
* @param tag
* 标记
* @param message
* 描述
* @param printTime
* 是否打印时间
*/
public static void d(String tag, String message, boolean printTime) {
Calendar current = Calendar.getInstance();
long endLogTimeInMillis = current.getTimeInMillis();
Log.d(tag, message + ":" + (endLogTimeInMillis - startLogTimeInMillis)
+ "ms");
}
/**
* 描述:打印这次的执行时间毫秒,需要首先调用prepareLog().
*
* @param tag
* 标记
* @param message
* 描述
* @param printTime
* 是否打印时间
*/
public static void d(Context context, String message, boolean printTime) {
String tag = context.getClass().getSimpleName();
d(tag, message, printTime);
}
/**
* 描述:打印这次的执行时间毫秒,需要首先调用prepareLog().
*
* @param clazz
* 标记
* @param message
* 描述
* @param printTime
* 是否打印时间
*/
public static void d(Class<?> clazz, String message, boolean printTime) {
String tag = clazz.getSimpleName();
d(tag, message, printTime);
}
/**
* debug日志的开关
*
* @param d
*/
public static void debug(boolean d) {
D = d;
}
/**
* info日志的开关
*
* @param i
*/
public static void info(boolean i) {
I = i;
}
/**
* error日志的开关
*
* @param e
*/
public static void error(boolean e) {
E = e;
}
/**
* 设置日志的开关
*
* @param e
*/
public static void setVerbose(boolean d, boolean i, boolean e) {
D = d;
I = i;
E = e;
}
/**
* 打开所有日志,默认全打开
*
* @param d
*/
public static void openAll() {
D = true;
I = true;
E = true;
}
/**
* 关闭所有日志
*
* @param d
*/
public static void closeAll() {
D = false;
I = false;
E = false;
}
/**
* format日志
*
* @param format
* @param args
* @return
*/
private static String buildMessage(String format, Object... args) {
String msg = (args == null) ? format : String.format(Locale.US, format,
args);
StackTraceElement[] trace = new Throwable().fillInStackTrace()
.getStackTrace();
String caller = "<unknown>";
for (int i = 2; i < trace.length; i++) {
Class<?> clazz = trace[i].getClass();
if (!clazz.equals(SaLogUtils.class)) {
String callingClass = trace[i].getClassName();
callingClass = callingClass.substring(callingClass
.lastIndexOf('.') + 1);
callingClass = callingClass.substring(callingClass
.lastIndexOf('$') + 1);
caller = callingClass + "." + trace[i].getMethodName();
break;
}
}
return String.format(Locale.US, "[%d] %s: %s", Thread.currentThread()
.getId(), caller, msg);
}
}