如何管住自己的log

背景:我们大多数情况不希望我们的log在应用上线依然被看到,所以我们可以采用以下的几种方式来限制住。


方法一

封装一个类两个作用:

1).通过一个debug开关决定是否输出log

2).可以决定是否写入文件


但这样还是有问题,就是我反编译代码之后,能看到log,方便别人破解代码,就出现了

方法二

在每一句log上都增加debug开关,debug开关同一控制

if(debug){

Log.v(***,***);

}

这样确实无法打印出来了,但是比较麻烦,所以还有

方法三

通过混淆来去掉log

在混淆文件中加入下面的代码:

-assumenosideeffects class android.util.Log {
    public static *** v(...);
    public static *** d(...);
    public static *** i(...);
    public static *** w(...);
    public static *** e(...);

}

就将我们的所有log全部优化没了,但是不能配置: -dontoptimize


还有一种场景是我们需要的时候,让他打印,不需要的时候,不让打印。

方法四:

这放方法一般做过原生系统开发的都知道,正常是打印不出来的,当需要打印的时候,使用下面命令就可以打印了,不输入的手机不会打印出来。

adb shell setprop log.tag.DD VERBOSE


直接拷贝一段源码,大家自己看吧

public class Logs {
  public static final String TAG = "DD";

  public static void call(Object self, String method, Object... args) {
    call(Log.DEBUG, self, method, args);
  }

  public static void call(int priority, Object self, String method, Object... args) {
    if (Log.isLoggable(TAG, priority)) {
      Log.d(
          TAG,
          String.format("Invoking %s.%s(%s)", self.getClass().getSimpleName(), method,
              TextUtils.join(", ", args)));
    }
  }

  public static void log(int priority, String msg) {
    if (Log.isLoggable(TAG, priority)) {
      Log.println(priority, TAG, msg);
    }
  }

  public static void log(int priority, Throwable e) {
    if (Log.isLoggable(TAG, priority)) {
      Log.println(priority, TAG, Log.getStackTraceString(e));
    }
  }

  public static void log(int priority, Throwable e, String msg) {
    if (Log.isLoggable(TAG, priority)) {
      Log.println(priority, TAG, msg + '\n' + Log.getStackTraceString(e));
    }
  }

  public static void logfmt(int priority, String format, Object... args) {
    if (Log.isLoggable(TAG, priority)) {
      Log.println(priority, TAG, String.format(format, args));
    }
  }

  public static void logfmt(int priority, Throwable e, String format, Object... args) {
    if (Log.isLoggable(TAG, priority)) {
      Log.println(priority, TAG, String.format(format, args) + '\n' + Log.getStackTraceString(e));
    }
  }

  private Logs() {}
}



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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值