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