在我的代码中使用Log.d()或Log.e()

mic*_*ael 7 android

我已经使用Log.d()Log.e()通过我的android应用程序进行调试.我想知道如果我发布这样的应用程序,用户是否会看到我放入的所有调试语句?我是否需要做一些特别的事情,以便用户即使挂起'adb logcat'也看不到调试日志?

谢谢.

Kry*_*lez 7

在某些情况下,保留日志记录可能非常糟糕:http://web.archive.org/web/20121222023201/http: //vbsteven.com/archives/535

您可以使用ProGuard自动删除它们:

-assumenosideeffects class android.util.Log {
    public static *** d(...);
    public static *** e(...);
}
Run Code Online (Sandbox Code Playgroud)


Ren*_*eno 4

考虑使用这个:isLoggable()

检查指定标记的日志是否可在指定级别记录。任何标签的默认级别都设置为 INFO。这意味着将记录高于(包括 INFO)的任何级别。在调用任何日志记录方法之前,您应该检查是否应该记录您的标签。您可以通过设置系统属性来更改默认级别:setprop log.tag.<YOUR_LOG_TAG> <LEVEL>其中级别可以是 VERBOSE、DEBUG、INFO、WARN、ERROR、ASSERT 或 SUPPRESS。SUPPRESS 将关闭您的标签的所有日志记录。您还可以创建一个 local.prop 文件,其中包含以下内容:log.tag.<YOUR_LOG_TAG>=<LEVEL>并将其放入/data/local.prop

就个人而言,对于发布,我会删除调试日志并使用 Proguard 保留错误日志。


最好像这样包裹它:

public class MyLog {

public static void d(String tag, String msg) {
   if (Log.isLoggable(tag, Log.DEBUG)) {
       Log.d(tag, msg);
}
}

public static void i(String tag, String msg) {
    if (Log.isLoggable(tag, Log.INFO)) {
     Log.i(tag, msg);
}
}  // and so on... 
Run Code Online (Sandbox Code Playgroud)

您可以通过发出 adb 命令来设置日志记录级别