不同的方法是优先级的指示。正如您列出的那样,它们从最不重要到最重要。我认为您如何将它们具体映射到代码中的调试日志取决于您正在处理的组件或应用程序,以及 Android 如何在不同的构建风格(eng、userdebug 和 user)上处理它们。我在 Android 的原生守护进程中做了相当多的工作,我就是这样做的。它可能并不直接适用于您的应用,但可能有一些共同点。如果我的解释听起来含糊不清,那是因为其中一些更像是一门艺术而不是一门科学。我的基本规则是尽可能高效,确保您可以合理地调试您的组件而不会破坏系统的性能,并始终检查错误并记录它们。
V - 以不同的时间间隔打印状态,或在我的组件处理的任何事件发生时打印输出。我的组件接收或发送的消息/事件的有效负载也可能非常详细的打印输出。
D - 我的组件中发生的小事件的详细信息,以及我的组件接收或发送的消息/事件的有效负载。
I - 我的组件接收或发送的任何消息/事件的标头,以及对我的组件操作至关重要的有效负载的任何重要部分。
W - 发生的任何异常或可疑的事情,但不一定是错误。
E - 错误,意思是当事情正常进行时不应该发生的事情。
我看到人们犯的最大错误是他们过度使用 V、D 和 I 之类的东西,但从不使用 W 或 E。如果根据定义,错误不应该发生,或者应该很少发生,那么在消息发生时记录消息对您来说非常便宜。另一方面,如果每次有人按下一个键,你都会执行 Log.i(),那么你就是在滥用共享的日志资源。当然,请使用常识并小心处理您无法控制的错误日志(如网络错误)或包含在紧密循环中的错误日志。
可能不好
Log.i("I am here");
好
Log.e("I shouldn't be here");
考虑到这一切,您的代码越接近“生产就绪”,您就可以越多地限制代码的基本日志记录级别(您需要在 alpha 中使用 V,在 beta 中需要 D,在生产中需要 I,甚至可能W 在生产中)。您应该浏览一些简单的用例并查看日志,以确保您在应用更多限制性过滤时仍然可以大致了解正在发生的事情。如果您使用下面的过滤器运行,您应该仍然能够知道您的应用在做什么,但可能无法获得所有详细信息。
logcat -v threadtime MyApp:I *:S