Android LogUtil(日志输出工具类)

本文介绍了Android开发中常用的LogUtil工具类,用于规范和管理日志输出。该工具类结构简洁,功能实用,适用于日常开发需求。作者分享了其代码,并欢迎读者提供改进建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    开发中常用到log输出,稍微规范些的项目必然会使用专门的log工具类进行管理。

    随着零零星星的进行更改,形成了我现在用的log工具类,代码结构比较简单,功能差不多能满足日常开发需要,现在分享给大家,也希望大伙提出改进。


package com.haier.ota.util;

import android.util.Log;

import com.haier.ota.BuildConfig;

public class LogUtil {
    public static boolean showDebugLog = BuildConfig.DEBUG;

    public static void i(Object objTag, Object objMsg) {
        String tag = getTag(objTag);
        String msg = (objMsg == null || objMsg.toString() == null) ? "null" : objMsg.toString();
        Log.i(tag, getMsgFormat(msg));
    }

    public static void d(Object objTag, Object objMsg) {
        if (showDebugLog) {
            String tag = getTag(objTag);
            String msg = (objMsg == null || objMsg.toString() == null) ? "null" : objMsg.toString();
            Log.d(tag, getMsgFormat(msg));
        }
    }

    public static void w(Object objTag, Object objMsg) {
        String tag = getTag(objTag);
        String msg = (objMsg == null || objMsg.toString() == null) ? "null" : objMsg.toString();
        Log.w(tag, getMsgFormat(msg));
    }

    public static void e(Object objTag, Object objMsg) {
        String tag = getTag(objTag);
        String msg = (objMsg == null || objMsg.toString() == null) ? "null" : objMsg.toString();
        Log.e(tag, getMsgFormat(msg));
    }

    private static String getTag(Object objTag) {
        String tag;
        if (objTag instanceof String) {
            tag = (String) objTag;
        } else if (objTag instanceof Class) {
            tag = ((Class<?>) objTag).getSimpleName();
        } else {
            tag = objTag.getClass().getSimpleName();
        }
        return tag;
    }

    /**
     * 获取类名,方法名,行号
     *
     * @return Thread:main, at com.haier.ota.OTAApplication.onCreate(OTAApplication.java:35)
     */
    private static String getFunctionName() {
        try {
            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() + ")";
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    private static String getMsgFormat(String msg) {
        return msg + "----" + getFunctionName();
    }

}
    最后,话唠一下,开发中log输出不要太过频繁(即避免短时间内大量输出log),log底层使用的应该是异步机制,频繁输出log很可能会丢失部分log,导致分析log的时候以为代码知悉出现了异常。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值