Androidapp开发过程中LogUtils

xiaoxiao2021-02-28  7

该LogUtils,可以包括输出log的方法名,在类中的第几行,及该类的包名。在调用的时候log前面会有具体的参数信息,找到log位置更便捷。

import android.text.TextUtils; import android.util.Log; /** * 对于Android系统Log输出日志的封装LogUtils * 1 可修改LogUtils中的LEVEL值觉得哪些级别的日志可以输出. * 所以方便选择性输出日志或者屏蔽日志输出 * 2 输出的日志除了本想输出的信息外还包含了该日志输出时所属 * 的线程,类,方法名,已经在该方法中的行数等实用信息 * 3 LogUtils的调用方式 * 3.1 按照系统原方式调用 * 3.2 或者不设置TAG,则默认为文件名 * 备注说明: * 在该示例中主要用到了StackTrace和StackTraceElement. * 详情可参见上篇博客《StackTrace简述以及StackTraceElement使用实例》 */ public class LogUtils { public static boolean isDebug=true;//默认是true,发布的时候要将其变为false public static final int VERBOSE = 1; public static final int DEBUG = 2; public static final int INFO = 3; public static final int WARN = 4; public static final int ERROR = 5; public static final int LEVEL = 1; public static final String SEPARATOR = ","; private LogUtils(){ throw new UnsupportedOperationException("cannot be instantiated"); } /** * /** * LogUtils工具说明: * 1 只输出等级大于等于LEVEL的日志 * 所以在开发和产品发布后通过修改LEVEL来选择性输出日志. * 当LEVEL=NOTHING则屏蔽了所有的日志. * 2 v,d,i,w,e均对应两个方法. * 若不设置TAG或者TAG为空则为设置默认TAG * @param message */ public static void v(String message) { if (!isDebug)return; if (LEVEL <= VERBOSE) { StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[3]; String tag = getDefaultTag(stackTraceElement); Log.v(tag, getLogInfo(stackTraceElement) + message); } } public static void v(String tag, String message) { if (!isDebug)return; if (LEVEL <= VERBOSE) { StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[3]; if (TextUtils.isEmpty(tag)) { tag = getDefaultTag(stackTraceElement); } Log.v(tag, getLogInfo(stackTraceElement) + message); } } public static void d(String message) { if (!isDebug)return; if (LEVEL <= DEBUG) { StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[3]; String tag = getDefaultTag(stackTraceElement); Log.d(tag, getLogInfo(stackTraceElement) + message); } } public static void d(String tag, String message) { if (!isDebug)return; if (LEVEL <= DEBUG) { StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[3]; if (TextUtils.isEmpty(tag)) { tag = getDefaultTag(stackTraceElement); } Log.d(tag, getLogInfo(stackTraceElement) + message); } } public static void i(String message) { if (!isDebug)return; if (LEVEL <= INFO) { StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[3]; String tag = getDefaultTag(stackTraceElement); Log.i(tag, getLogInfo(stackTraceElement) + message); } } public static void i(String tag, String message) { if (!isDebug)return; if (LEVEL <= INFO) { StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[3]; if (TextUtils.isEmpty(tag)) { tag = getDefaultTag(stackTraceElement); } Log.i(tag, getLogInfo(stackTraceElement) + message); } } public static void w(String message) { if (!isDebug)return; if (LEVEL <= WARN) { StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[3]; String tag = getDefaultTag(stackTraceElement); Log.w(tag, getLogInfo(stackTraceElement) + message); } } public static void w(String tag, String message) { if (!isDebug)return; if (LEVEL <= WARN) { StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[3]; if (TextUtils.isEmpty(tag)) { tag = getDefaultTag(stackTraceElement); } Log.w(tag, getLogInfo(stackTraceElement) + message); } } public static void e(String tag, String message) { if (!isDebug)return; if (LEVEL <= ERROR) { StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[3]; if (TextUtils.isEmpty(tag)) { tag = getDefaultTag(stackTraceElement); } Log.e(tag, getLogInfo(stackTraceElement) + message); } } public static void e(String message) { if (!isDebug)return; if (LEVEL <= ERROR) { StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[3]; String tag = getDefaultTag(stackTraceElement); Log.e(tag, getLogInfo(stackTraceElement) + message); } } /** * 获取默认的TAG名称. * 比如在MainActivity.java中调用了日志输出. * 则TAG为MainActivity */ public static String getDefaultTag(StackTraceElement stackTraceElement) { String fileName = stackTraceElement.getFileName(); String stringArray[] = fileName.split("\\."); String tag = stringArray[0]; return tag; } /** * 输出日志所包含的信息 */ public static String getLogInfo(StackTraceElement stackTraceElement) { StringBuilder logInfoStringBuilder = new StringBuilder(); // 获取线程名 // String threadName = Thread.currentThread().getName(); // // 获取线程ID // long threadID = Thread.currentThread().getId(); // 获取文件名.即xxx.java // String fileName = stackTraceElement.getFileName(); // 获取类名.即包名+类名 String className = stackTraceElement.getClassName(); // 获取方法名称 String methodName = stackTraceElement.getMethodName(); // 获取生日输出行数 int lineNumber = stackTraceElement.getLineNumber(); logInfoStringBuilder.append("[ "); // logInfoStringBuilder.append("threadID=" + threadID).append(SEPARATOR); // logInfoStringBuilder.append("threadName=" + threadName).append(SEPARATOR); // logInfoStringBuilder.append("fileName=" + fileName).append(SEPARATOR); logInfoStringBuilder.append("className=" + className).append(SEPARATOR); logInfoStringBuilder.append("methodName=" + methodName).append(SEPARATOR); logInfoStringBuilder.append("lineNumber=" + lineNumber); logInfoStringBuilder.append(" ] "); return logInfoStringBuilder.toString(); } }

在HomeActivity中调用LogUtils,如下

打印的日志如下:

2/com.alpha.alphaapp.debug E/HomeActivity: [className=com.******.ui.HomeActivity,methodName=getLayoutId,lineNumber=32 ] 我是测试的log

这样是不是找到log的位置更方便呢。

转载请注明原文地址: https://www.6miu.com/read-1250272.html

最新回复(0)