对Log日志的简易封装
来源:互联网 发布:伦敦帝国学院 知乎 编辑:程序博客网 时间:2024/05/19 03:23
Log是开发调试的必备工具,使用频率比较高,系统自带的log打印已经为我们做好了分级,方便在筛选.但是在实际使用中总觉得还不够完善,这里对Log日志进行一个简易的封装.
先看封装后的使用
使用
ILog.i("这是log");
设置(可在application中设置)
ILog.setDebug(true);//设置是否打印日志ILog.setShowInfo(true);//是否在打印添加附加信息ILog.setSeparator("-");//附加信息的分隔符
作用
- 根据系统运行模式(debug/relase)自动判断是否输出log(默认,可设置)
- 自动使用类名作为TAG(默认,可自行指定tag)
- 增加log的附加信息的打印,包括类名,方法名,线程(默认打印,可关闭)
附加信息的打印
默认开启附加信息的打印,包括方法名-线程名-行数.附加信息会显示在log实际信息的后面
可调用setShowInfo(false)关闭附加信息的打印
附加信息分割符默认为”,”,可通过setSeparator()设置自己喜欢的分隔符
源码
package com.example.chenzhen.isimpledemo.helper;import android.text.TextUtils;import android.util.Log;import com.example.chenzhen.isimpledemo.BuildConfig;/** * =================中康================ * * @Author: 陈振 * @Email : 18620156376@163.com * @Time : 2016/8/17 10:11 * @Action :log工具类 * 1-根据系统运行模式(debug/relase)自动判断是否输出log * 2-自动使用类名作为TAG * 3-增加log的附加信息的打印,包括类名,方法名,线程 * * =================中康================ */public class ILog { private static boolean debug = BuildConfig.DEBUG;//是否开启debug,默认根据运行方式选择 private static String separator = ",";//分隔符 private static boolean showInfo = true;//是否显示log附加信息,包括线程名+方法名+行数 public static void setDebug(boolean iSDebug) { ILog.debug = iSDebug; } public static void setSeparator(String separator) { ILog.separator = separator; } public static void setShowInfo(boolean showInfo) { ILog.showInfo = showInfo; } public static void v(String message) { if (debug) { StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[3]; String tag = getDefaultTag(stackTraceElement); Log.v(tag, message + getLogInfo(stackTraceElement)); } } public static void v(String tag, String message) { if (debug) { StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[3]; if (TextUtils.isEmpty(tag)) { tag = getDefaultTag(stackTraceElement); } Log.v(tag, message + getLogInfo(stackTraceElement)); } } public static void d(String message) { if (debug) { StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[3]; String tag = getDefaultTag(stackTraceElement); Log.d(tag, message + getLogInfo(stackTraceElement)); } } public static void d(String tag, String message) { if (debug) { StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[3]; if (TextUtils.isEmpty(tag)) { tag = getDefaultTag(stackTraceElement); } Log.d(tag, message + getLogInfo(stackTraceElement)); } } public static void i(String message) { if (debug) { StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[3]; String tag = getDefaultTag(stackTraceElement); Log.i(tag, message + getLogInfo(stackTraceElement)); } } public static void i(String tag, String message) { if (debug) { StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[3]; if (TextUtils.isEmpty(tag)) { tag = getDefaultTag(stackTraceElement); } Log.i(tag, message + getLogInfo(stackTraceElement)); } } public static void w(String message) { if (debug) { StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[3]; String tag = getDefaultTag(stackTraceElement); Log.w(tag, message + getLogInfo(stackTraceElement)); } } public static void w(String tag, String message) { if (debug) { StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[3]; if (TextUtils.isEmpty(tag)) { tag = getDefaultTag(stackTraceElement); } Log.w(tag, message + getLogInfo(stackTraceElement)); } } public static void e(String tag, String message) { if (debug) { StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[3]; if (TextUtils.isEmpty(tag)) { tag = getDefaultTag(stackTraceElement); } Log.e(tag, message + getLogInfo(stackTraceElement)); } } /** * 获取默认的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) { if (!showInfo) return ""; 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(); }}
0 0
- 对Log日志的简易封装
- 简易Java日志(Log)输出工具的封装
- Log日志框架-对原生Log进行简单封装
- GO-log日志封装
- Log日志简陋封装
- GO-log日志封装
- 工具类的封装-Log日志的封装
- Android对打印Log的封装
- 对log工具类的方法封装
- Android之Log的日志打印信息的封装
- 对于Android系统Log输出日志的封装LogUtils
- Android之系统Log输出日志的封装类LogUtil
- Android之系统Log输出日志的封装类LogUtil
- Logger:封装系统log的日志打印工具
- 项目中对Rotrofit网络的简易封装
- C++实现简易log日志系统
- Timber(对Log类封装的一个工具)
- 简易轮播图的封装
- 题目
- Merit价值和成果管理系统——1侧栏与iframe
- 【30】Substring with Concatenation of All Words
- 解题报告:Codeforces Round #226 (Div. 2)E. Bear in the Field 矩阵加速幂
- Android中Socket使用
- 对Log日志的简易封装
- C++11标准之右值引用(ravalue reference)
- div span 区别
- 过滤器
- 机器学习——基本概念
- 计划工作是管理的首要职能
- Maven学习 (三) 使用m2eclipse创建web项目
- IllegalThreadStateException异常
- 【《代码整洁之道》精读与演绎】之四 优秀代码的格式准则