Android Debug 之 Log 最佳实践

本文介绍了在Android开发中如何优化日志打印,包括封装Log类以实现环境控制,通过ZLogHelper创建可点击跳转的堆栈信息,以及在项目实战中的应用。文章强调了在开发和发布环境中合理使用日志的重要性,并提供了引入开源库的步骤。

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

本文微信公众号「AndroidTraveler」首发。

背景

在开发过程中,调试是必不可少的一项工作。

当我们要确定项目的逻辑时,当我们要了解界面的生命周期时,当我们发现新写的逻辑与期望效果不一致时,当我们觉得数据有问题时…

而调试有两种方式:

第一种就是使用 debug 模式运行 APP,然后通过断点让程序运行到指定位置进行分析。

第二种就是打日志的方式,通过观察输出来确定程序是否运行到该位置以及此时的数据。

本篇文章主要聚焦在第二种方式上面。

在 Android 里面,打日志使用的系统 API 是 Log,你以为直接使用就完了吗?

封装

假设你在需要打印日志的地方直接使用系统的 API,那么当遇到下面情况时,会「牵一发而动全身」。

场景一:如果我打印日志要用三方库的日志 API,那么我要查找项目所有使用位置,并一一替换。

场景二:如果我希望在开发环境下打印日志,release 环境不打印,这个时候每个位置都需要单独做处理。

因此我们需要在使用 Log 进行日志打印之前,做一层封装。

假设我们的类名字为 ZLog,代码如下:

import android.util.Log;

/**
 * Created on 2019-10-26
 *
 * @author Zengyu.Zhan
 */
public class ZLog {
   
    public static int v(String tag, String msg) {
   
        return Log.v(tag, msg);
    }

    public static int d(String tag, String msg) {
   
        return Log.d(tag, msg);
    }

    public static int i(String tag, String msg) {
   
        return Log.i(tag, msg);
    }

    public static int w(String tag, String msg) {
   
        return Log.w(tag, msg);
    }

    public static int e(String tag, String msg) {
   
        return Log.e(tag, msg);
    }
}

这样处理之后,对于场景一和场景二,我们需要修改的只是 ZLog 这个类,而不需要到具体使用 ZLog 的所有地方去修改。

提供日志打印控制

我们知道,日志打印可能包含敏感信息,而且过多的日志打印可能影响 APP 的性能,因此我们一般是在开发时候打开日志,在发布 APP 之前关闭。

因此我们这边需要提供一个标志位来控制日志的打印与否。

import android.util.Log;

/**
 * Created on 2019-10-26
 *
 * @author Zengyu.Zhan
 */
public class ZLog {
   
    private static boolean isDebugMode = false;
    public static void setDebugMode(boolean debugMode) {
   
        isDebugMode = debugMode;
    }

    public static int v(String tag, String msg) {
   
        return isDebugMode ? Log.v(tag, msg) : -1;
    }

    public static int d(String tag, String msg) {
   
        return isDebugMode ? Log.d(tag, msg
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值