Android之系统Log输出日志的封装类LogUtil
来源:互联网 发布:中国居民膳食指南 知乎 编辑:程序博客网 时间:2024/04/27 16:37
在Android开发过程中经常用到Log,在日志打印中,我们需要频繁定义日志的TAG,并且日志内容不能输出方法名,线程ID以及行数等。于是就定义了一个基于这个需求的日志辅助类——LogUtil工具类。
自定义的LogUtil工具类如下:
package com.mylogutiltest;import android.util.Log;import java.util.Locale;public class LogUtil { private static boolean LOGV = true; private static boolean LOGD = true; private static boolean LOGI = true; private static boolean LOGW = true; private static boolean LOGE = true; // 直接使用Log public static void v(String tag, String mess) { if (LOGV) { Log.v(tag, mess); } } public static void d(String tag, String mess) { if (LOGD) { Log.d(tag, mess); } } public static void i(String tag, String mess) { if (LOGI) { Log.i(tag, mess); } } public static void w(String tag, String mess) { if (LOGW) { Log.w(tag, mess); } } public static void e(String tag, String mess) { if (LOGE) { Log.e(tag, mess); } } /** * 获取到调用者的类名 * @return 调用者的类名 */ private static String getTag() { StackTraceElement[] trace = new Throwable().fillInStackTrace() .getStackTrace(); String callingClass = ""; for (int i = 2; i < trace.length; i++) { Class<?> clazz = trace[i].getClass(); if (!clazz.equals(LogUtil.class)) { callingClass = trace[i].getClassName(); callingClass = callingClass.substring(callingClass .lastIndexOf('.') + 1); break; } } return callingClass; } //不需要再在类中定义TAG,直接打印日志信息 public static void v1(String mess) { if (LOGV) { Log.v(getTag(), mess); } } public static void d1(String mess) { if (LOGD) { Log.d(getTag(), mess); } } public static void i1(String mess) { if (LOGI) { Log.i(getTag(), mess); } } public static void w1(String mess) { if (LOGW) { Log.w(getTag(), mess); } } public static void e1(String mess) { if (LOGE) { Log.e(getTag(), mess); } } /** * 获取线程ID,方法名和输出信息 * @param msg * @return */ private static String buildMessage(String msg) { StackTraceElement[] trace = new Throwable().fillInStackTrace() .getStackTrace(); String caller = ""; for (int i = 2; i < trace.length; i++) { Class<?> clazz = trace[i].getClass(); if (!clazz.equals(LogUtil.class)) { caller = trace[i].getMethodName(); break; } } return String.format(Locale.US, "[%d] %s: %s", Thread.currentThread() .getId(), caller, msg); } //不需要再在类中定义TAG,打印线程ID,方法名和输出信息 public static void v2(String mess) { if (LOGV) { Log.v(getTag(), buildMessage(mess)); } } public static void d2(String mess) { if (LOGD) { Log.d(getTag(), buildMessage(mess)); } } public static void i2(String mess) { if (LOGI) { Log.i(getTag(), buildMessage(mess)); } } public static void w2(String mess) { if (LOGW) { Log.w(getTag(), buildMessage(mess)); } } public static void e2(String mess) { if (LOGE) { Log.e(getTag(), buildMessage(mess)); } } //不需要再在类中定义TAG,打印类名,方法名,行号等.并定位行 public static void v3(String mess) { if (LOGV) { Log.v(getTag(), getMsgFormat(mess)); } } public static void d3(String mess) { if (LOGD) { Log.d(getTag(), getMsgFormat(mess)); } } public static void i3(String mess) { if (LOGI) { Log.i(getTag(), getMsgFormat(mess)); } } public static void w3(String mess) { if (LOGW) { Log.w(getTag(), getMsgFormat(mess)); } } public static void e3(String mess) { if (LOGE) { Log.e(getTag(), getMsgFormat(mess)); } } /** * 获取相关数据:类名,方法名,行号等.用来定位行 * @return */ private static String getFunctionName() { StackTraceElement[] sts = Thread.currentThread().getStackTrace(); if (sts != null) { for (StackTraceElement st : sts) { if (st.isNativeMethod()) { continue; } if (st.getClassName().equals(Thread.class.getName())) { continue; } if (st.getClassName().equals(LogUtil.class.getName())) { continue; } return "[ Thread:" + Thread.currentThread().getName() + ", at " + st.getClassName() + "." + st.getMethodName() + "(" + st.getFileName() + ":" + st.getLineNumber() + ")" + " ]"; } } return null; } /** * 输出格式定义 * @param msg * @return */ private static String getMsgFormat(String msg) { return msg + " ;" + getFunctionName(); }}
MainActivity.java文件 :
package com.mylogutiltest;import android.app.Activity;import android.os.Bundle;public class MainActivity extends Activity { public static final String TAG = "MainActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 直接使用Log LogUtil.d(TAG, "ddddddd"); LogUtil.e(TAG, "eeeeeee"); LogUtil.i(TAG ,"iiiiiii"); LogUtil.v(TAG, "vvvvvvv"); LogUtil.w(TAG, "wwwwwww"); //不需要再在类中定义TAG,直接打印日志信息 LogUtil.d1("ddddddd"); LogUtil.e1("eeeeeee"); LogUtil.i1("iiiiiii"); LogUtil.v1("vvvvvvv"); LogUtil.w1("wwwwwww"); //不需要再在类中定义TAG,打印线程ID,方法名和输出信息 LogUtil.d2("ddddddd"); LogUtil.e2("eeeeeee"); LogUtil.i2("iiiiiii"); LogUtil.v2("vvvvvvv"); LogUtil.w2("wwwwwww"); //不需要再在类中定义TAG,打印类名,方法名,行号等.并定位行 LogUtil.d3("ddddddd"); LogUtil.e3("eeeeeee"); LogUtil.i3("iiiiiii"); LogUtil.v3("vvvvvvv"); LogUtil.w3("wwwwwww"); }}
结果打印:
11-07 09:48:27.703 22447-22447/com.mylogutiltest D/MainActivity: ddddddd11-07 09:48:27.703 22447-22447/com.mylogutiltest E/MainActivity: eeeeeee11-07 09:48:27.703 22447-22447/com.mylogutiltest I/MainActivity: iiiiiii11-07 09:48:27.703 22447-22447/com.mylogutiltest V/MainActivity: vvvvvvv11-07 09:48:27.703 22447-22447/com.mylogutiltest W/MainActivity: wwwwwww11-07 09:48:27.703 22447-22447/com.mylogutiltest D/MainActivity: ddddddd11-07 09:48:27.703 22447-22447/com.mylogutiltest E/MainActivity: eeeeeee11-07 09:48:27.703 22447-22447/com.mylogutiltest I/MainActivity: iiiiiii11-07 09:48:27.703 22447-22447/com.mylogutiltest V/MainActivity: vvvvvvv11-07 09:48:27.703 22447-22447/com.mylogutiltest W/MainActivity: wwwwwww11-07 09:48:27.713 22447-22447/com.mylogutiltest D/MainActivity: [1] onCreate: ddddddd11-07 09:48:27.713 22447-22447/com.mylogutiltest E/MainActivity: [1] onCreate: eeeeeee11-07 09:48:27.733 22447-22447/com.mylogutiltest I/MainActivity: [1] onCreate: iiiiiii11-07 09:48:27.733 22447-22447/com.mylogutiltest V/MainActivity: [1] onCreate: vvvvvvv11-07 09:48:27.733 22447-22447/com.mylogutiltest W/MainActivity: [1] onCreate: wwwwwww11-07 09:48:27.733 22447-22447/com.mylogutiltest D/MainActivity: ddddddd ;[ Thread:main, at com.mylogutiltest.MainActivity.onCreate(MainActivity.java:35) ]11-07 09:48:27.733 22447-22447/com.mylogutiltest E/MainActivity: eeeeeee ;[ Thread:main, at com.mylogutiltest.MainActivity.onCreate(MainActivity.java:36) ]11-07 09:48:27.733 22447-22447/com.mylogutiltest I/MainActivity: iiiiiii ;[ Thread:main, at com.mylogutiltest.MainActivity.onCreate(MainActivity.java:37) ]11-07 09:48:27.733 22447-22447/com.mylogutiltest V/MainActivity: vvvvvvv ;[ Thread:main, at com.mylogutiltest.MainActivity.onCreate(MainActivity.java:38) ]11-07 09:48:27.743 22447-22447/com.mylogutiltest W/MainActivity: wwwwwww ;[ Thread:main, at com.mylogutiltest.MainActivity.onCreate(MainActivity.java:39) ]
0 0
- Android之系统Log输出日志的封装类LogUtil
- Android之系统Log输出日志的封装类LogUtil
- Android Log输出 log开关 日志打印器 LogUtil
- 对于Android系统Log输出日志的封装LogUtils
- Android LogUtil(log工具类)
- Android之Log的日志打印信息的封装
- Android工具类之LogUtil
- LogUtil log 工具类
- Android开发之封装log打印日志的工具类,实用logutils详细代码
- 简单的写日志工具类LogUtil
- android Log日志输出
- 简易Java日志(Log)输出工具的封装
- Android开发实用技巧之三:定制自己的日志工具LogUtil.java
- android 日志打印器 LogUtil
- 自定义android日志管理工具LogUtil
- Android Log 日志系统
- Android日志系统(Log)
- Logger:封装系统log的日志打印工具
- KMP算法详解
- 用GDB调试程序(三)
- DetachedCriteria多条件查询or,disjunction
- 如何理解Java中的隐藏与覆盖
- Elasticsearch[2.0] ☞ Java Client API
- Android之系统Log输出日志的封装类LogUtil
- 用GDB调试程序(四)
- Python编程入门——基础语法详解
- Openstack虚机实例状态错误手工恢复vm_state:error
- Zmodem服务(SecureCRT)
- 矩母函数
- I-TOP4412内核驱动加载步骤(通过TF卡)
- 数学中的两个重要极限公式
- Redis简介与安装【实验楼学习笔记】