我在我的android应用程序中使用了Log.d()
和Log.e()
来进行调试。
我想知道如果我发布这样的应用程序,用户是否会看到我放入的所有调试语句?我是否需要做一些特别的事情,以便即使用户连接'adb logcat',用户也不会看到调试日志?
谢谢。
答案 0 :(得分:7)
在某些情况下,离开日志记录语句可能非常糟糕: http://web.archive.org/web/20121222023201/http://vbsteven.com/archives/535
您可以使用ProGuard自动将其全部删除:
-assumenosideeffects class android.util.Log {
public static *** d(...);
public static *** e(...);
}
答案 1 :(得分:4)
用户(或任何具有日志访问权限的应用)不仅可以查看您的日志,而且您的日志还会导致您的应用运行速度变慢并使用更多电量。
编写日志,尤其是从Java编写日志,可能比你想象的要贵得多:只需用Java构建字符串就可以了。
答案 2 :(得分:3)
考虑使用此: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...
您可以设置记录级别by issuing an adb command
答案 3 :(得分:1)
市场中的应用程序允许用户即使不连接开发环境也能查看日志。
CatLog是我个人使用过的,它会告诉你一切。
我在我的应用程序中所做的是创建一个包装类,我可以使用布尔标志关闭自己。它具有使TAG参数成为我的代码的通用吞吐量的额外好处。
public class QLog {
private static final String TAG = "MyAppTag";
private static final boolean DEBUG_MODE = true;
public static void d(String msg) {
if(DEBUG_MODE) {
Log.d(TAG, msg);
}
}
...
}
答案 4 :(得分:1)
正如在android.developer.com中所说的
当您构建要传递给Log.d的字符串时,编译器使用StringBuilder并且至少发生三次分配:StringBuilder本身,缓冲区和String对象。实际上,还有另一个缓冲区分配和复制,对gc的压力更大。这意味着如果您的日志消息被过滤掉,那么您可能正在进行大量工作并产生大量开销。
这是链接: http://developer.android.com/reference/android/util/Log.html
答案 5 :(得分:1)
开发时可以使用它们。发布时,最好删除或混淆消息以保护PII(个人身份信息)。这里的答案非常有用:Android Log.v(), Log.d(), Log.i(), Log.w(), Log.e() - When to use each one?
这是教你释放软件时处理这些日志的工具。Remove all debug logging calls before publishing: are there tools to do this?
答案 6 :(得分:0)
如果您的用户是开发人员,并将设备连接到正在开发的计算机并打开LogCat,那么如果他与该应用程序进行交互,他将在Logcat上查看所有日志。当您要将应用程序发布给最终用户时,您应该删除这些日志。
答案 7 :(得分:0)
记录准则
Log.v(String tag, String msg) (verbose)
Log.d(String tag, String msg) (debug)
Log.i(String tag, String msg) (information)
Log.w(String tag, String msg) (warning)
Log.e(String tag, String msg) (error)
To only show logs on debug builds:
if (BuildConfig.DEBUG) Log.d(TAG, "The value of x is " + x);