自定义日志打印

Android中的日志工具类Log(android.util.Log),这个类提供了如下几个方法来提供我们打印:


1.Log.v();

这个方法用于打印那些最为琐碎的,意义最小的日志信息。对应的级别verbose,是Android日志里面级别最低的一中。

2.Log.d();

这个方法是打印一些调试信息,这些信息对你调试程序和分析问题应该有帮助的。对应的级别是debug,比verbose高一级。

3.Log.i();

这个方法是用于打印一些比较重要的数据,这些数据应该是你非常想看的。可以帮助你分析用户行为的那种。对应级别是info,比debug高一级。

4.Log.w();

这个方法用于打印一些警告信息,提示程序在这个地方可能存在潜在的风险,最好去修复一下这些出现的警告的地方。对应的级别warm,比info高一级。

5.Log.e();

这个方法是打印程序中的错误信息,比如程序中的catch语句当中,有错误信息打印的时候。对应的级别是error,比warm高一级


现在我们了解了Android的打印数据的级别,当时有这写在项目中应用还是不够的,这样在项目上线之前我们还要一个一个的将项目中的日志打印代码删除,来保护一些机密诗句不被泄露或者提高运行效率,现在我们就来设计一个既不用删除代码并且能够随意切换日志级别与是否打印的自定义的日志工具类。


package *;

import android.text.TextUtils;
import android.util.Log;

/**
 * 
 * 日志打印工具
 */
public class LogUtil {

    /**
     * level 决定日志的显示级别,
     * VERBOSE显示所有级别日志
     * 显示中间个个级别的日志
     * NOTHING不是显示任何日志
     */

    private static final int VERBOSE = 1;

    private static final int DEBUG = 2;

    private static final int INFO = 3;

    private static final int WARN = 4;

    private static final int ERROR = 5;

    private static final int NOTHING = 6;

    /**
     * 控制打印级别
     * 是否打印日志
     */
    private static final int LEVEL = VERBOSE;

    //本项目默认tag
    private static final String defaultTag = "zonglv";

    public static void v(String msg){
        v(null, msg);
    }

    public static void v(String tag, String meg){
        if(TextUtils.isEmpty(tag)){
            tag = defaultTag;
        }
        if(LEVEL <= VERBOSE){
            Log.v(tag,meg);
        }
    }

    public static void d(String msg){
        d(null, msg);
    }

    public static void d(String tag, String msg){
        if(TextUtils.isEmpty(tag)){
            tag = defaultTag;
        }
        if(LEVEL <= DEBUG){
            Log.d(tag, msg);
        }
    }

    public static void i(String msg){
        i(null, msg);
    }

    public static void i(String tag, String msg){
        if(TextUtils.isEmpty(tag)){
            tag = defaultTag;
        }
        if(LEVEL <= INFO){
            Log.i(tag, msg);
        }
    }

    public static void w(String msg){
        w(null,msg);
    }

    public static void w(String tag, String msg){
        if(TextUtils.isEmpty(tag)){
            tag = defaultTag;
        }
        if(LEVEL <= WARN){
            Log.w(tag, msg);
        }
    }

    public static void e(String msg){
        e(null, msg);
    }

    public static void e(String tag, String msg){
        if(TextUtils.isEmpty(tag)){
            tag = defaultTag;
        }
        if(LEVEL <= ERROR){
            Log.e(tag, msg);
        }
    }
}


这个日志打印流程,在咖啡过程中是方便了很多。但是每到打包的时候,我没都要修改配置文件。流程繁琐容易遗忘,那我们继续优化一下。

android {
    compileSdkVersion 23
    buildToolsVersion '25.0.0'
    defaultConfig {
        applicationId "gggggggggggg"
        minSdkVersion 16
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
     

        buildConfigField "boolean", "LOG_DEBUG", "true"
        buildConfigField "String", "BASE_URL", "\"ggggggggggggggggggggggggggg\""
    }

在gradle文件的Android中的default中添加 debug = false

        buildConfigField "boolean", "LOG_DEBUG", "true"

在gradle文件中的buildType中的debug中同样添加debug = true

buildTypes {
    release {
        //混淆
        minifyEnabled true
        //Zipalign优化
        zipAlignEnabled true
        // 移除无用的resource文件
        shrinkResources true
        //前一部分代表系统默认的android程序的混淆文件,该文件已经包含了基本的混淆声明,后一个文件是自己的定义混淆文件
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        //签名
        signingConfig signingConfigs.release
    }

    debug {
        buildConfigField "String", "BASE_URL", "\"http://192.168.122.38:8080/hhhh/\""
        buildConfigField "boolean", "LOG_DEBUG", "true"
        zipAlignEnabled true
        minifyEnabled false
        shrinkResources false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        signingConfig signingConfigs.debug
    }
}

在我们的工具类中添加 level&&debug 的条件,直接运行会debug 配置会覆盖release中的配置。打包的流程不会执行debug配置。

我们的正式环境就不用担心会有日志输出了。开发环境中会正常的输出日志

debug与release会自动生成到BuildConfig文件中的静态类中。

public class LogUtils {


    /**
     * level 决定日志的显示级别,
     * VERBOSE显示所有级别日志
     * 显示中间个个级别的日志
     * NOTHING不是显示任何日志
     */

    private static final int VERBOSE = 1;

    private static final int DEBUG = 2;

    private static final int INFO = 3;

    private static final int WARN = 4;

    private static final int ERROR = 5;

    private static final int NOTHING = 6;

    /**
     * 控制打印级别
     * 是否打印日志
     */
    private static final int LEVEL = VERBOSE;//显示所有级别日志
//    private static final int LEVEL = NOTHING;//屏蔽所有日志

    //本项目默认tag
    private static final String defaultTag = "zhuangjian";//默认过滤器


    public static void v(String msg){
        v(null, msg);
    }

    public static void v(String tag, String meg){
        if(TextUtils.isEmpty(tag)){
            tag = defaultTag;
        }
        if(LEVEL <= VERBOSE && BuildConfig.DEBUG){
            Log.v(tag,meg);
        }
    }

    public static void d(String msg){
        d(null, msg);
    }

    public static void d(String tag, String msg){
        if(TextUtils.isEmpty(tag)){
            tag = defaultTag;
        }
        if(LEVEL <= DEBUG && BuildConfig.DEBUG){
            Log.d(tag, msg);
        }
    }

    public static void i(String msg){
        i(defaultTag, msg);
    }

    public static void i(String tag, String msg){
        if(TextUtils.isEmpty(tag)){
            tag = defaultTag;
        }
        if( LEVEL <= INFO && BuildConfig.DEBUG){
            Log.i(tag, msg);

        }
    }

    public static void w(String msg){
        w(null,msg);
    }

    public static void w(String tag, String msg){
        if(TextUtils.isEmpty(tag)){
            tag = defaultTag;
        }
        if(LEVEL <= WARN && BuildConfig.DEBUG){
            Log.w(tag, msg);
        }
    }

    public static void e(String msg){
        e(null, msg);
    }

    public static void e(String tag, String msg){
        if(TextUtils.isEmpty(tag)){
            tag = defaultTag;
        }
        if(LEVEL <= ERROR && BuildConfig.DEBUG){
            Log.e(tag, msg);
        }
    }
}

















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值