Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Log.v()、Log.d()、Log.i()、Log.w()、Log.e()-何时使用每一个?_Android_Logcat - Fatal编程技术网

Android Log.v()、Log.d()、Log.i()、Log.w()、Log.e()-何时使用每一个?

Android Log.v()、Log.d()、Log.i()、Log.w()、Log.e()-何时使用每一个?,android,logcat,Android,Logcat,不同的LogCat方法有: Log.v(); // Verbose Log.d(); // Debug Log.i(); // Info Log.w(); // Warning Log.e(); // Error 使用每种类型的日志记录的适当情况是什么?我知道这可能只是一点语义问题,也许并不重要,但对于Android Studio和Eclipse中的LogCat过滤,如果知道我在适当的时间使用了适当的方法,那就太好了。让我们按相反的顺序进行: :这是为坏事发生时准备的。在catch语句中使用

不同的
LogCat
方法有:

Log.v(); // Verbose
Log.d(); // Debug
Log.i(); // Info
Log.w(); // Warning
Log.e(); // Error

使用每种类型的日志记录的适当情况是什么?我知道这可能只是一点语义问题,也许并不重要,但对于Android Studio和Eclipse中的
LogCat
过滤,如果知道我在适当的时间使用了适当的方法,那就太好了。

让我们按相反的顺序进行:

  • :这是为坏事发生时准备的。在catch语句中使用此标记。您知道发生了错误,因此正在记录错误

  • :当你怀疑有可疑的事情发生时,请使用此选项。您可能没有完全处于完全打开错误模式,但可能已从某些意外行为中恢复。基本上,用它来记录你不希望发生但不一定是错误的事情。有点像“嘿,事情发生了,很奇怪,我们应该调查一下。”

  • :使用此选项将有用信息发布到日志中。例如:您已成功连接到服务器。基本上用它来报告成功

  • :用于调试目的。如果您想打印一组消息,以便记录程序的确切流程,请使用此选项。如果要保存变量值的日志,请使用此选项

  • :当您想完全疯狂地进行日志记录时,请使用此选项。如果出于某种原因,你决定在应用程序的某个特定部分记录每一件小事,请使用log.v标签

作为奖励

  • 当前位置当东西完全、可怕地出错时使用此选项。你知道那些捕获块,在那里你捕获了你永远不会得到的错误…是的,如果你想记录它们,请使用log.wtf

我认为这些不同类型的日志记录的意义在于,如果你想让你的应用程序基本上自我过滤自己的日志。所以Verbose可以是绝对记录应用程序中所有重要的内容,然后调试级别将记录Verbose日志的一个子集,然后Info级别将记录调试日志的一个子集。当您开始查看错误日志时,您只想记录可能发生的任何类型的错误。还有一个称为致命的调试级别,用于当应用程序中的某些东西真正击中风扇时进行调试


一般来说,您是对的,它基本上是任意的,您可以定义什么是调试日志、什么是信息日志、什么是错误日志等等。

不同的方法表示优先级。正如你所列出的,它们从最小到最重要。我认为如何将它们映射到代码中的调试日志取决于您正在使用的组件或应用程序,以及Android如何在不同的构建风格(eng、userdebug和user)上处理它们。我在Android的本机守护进程中做了大量工作,我就是这样做的。它可能不直接适用于你的应用程序,但可能有一些共同点。如果我的解释听起来含糊不清的话,那是因为其中一些更像是一门艺术而不是一门科学。我的基本原则是尽可能高效,确保在不影响系统性能的情况下合理地调试组件,并始终检查错误并记录它们

V-在不同的时间间隔或组件处理的任何事件发生时的状态打印输出。也可能是我的组件接收或发送的消息/事件的有效负载的非常详细的打印输出

D-组件内发生的次要事件的详细信息,以及组件接收或发送的消息/事件的有效负载

I-我的组件接收或发送的任何消息/事件的头,以及对我的组件的操作至关重要的有效负载的任何重要部分

W-任何不寻常或可疑的事情,但不一定是错误

电子错误,意味着当事情按其应有的方式运行时不应该发生的事情

我看到人们犯的最大错误是他们过度使用了V、D和I,但从不使用W或E。根据定义,如果错误是不应该发生的,或者应该很少发生,那么在消息发生时记录消息是非常便宜的。另一方面,如果每次有人按一个键,您就执行Log.i(),那么您就是在滥用共享日志资源。当然,使用常识并小心处理超出您控制范围的错误日志(如网络错误)或包含在紧密循环中的错误日志

可能不好

Log.i("I am here");
Log.e("I shouldn't be here");

Log.i("I am here");
Log.e("I shouldn't be here");
记住所有这些,代码越接近“生产就绪”,就越可以限制代码的基本日志记录级别(在alpha中需要V,在beta中需要D,在生产中需要I,甚至在生产中需要W)。您应该运行一些简单的用例并查看日志,以确保在应用更严格的过滤时仍然能够大致了解发生了什么。如果你使用下面的过滤器运行,你应该仍然能够知道你的应用程序正在做什么,但可能无法获得所有细节

logcat -v threadtime MyApp:I *:S
提供一些基本指导:

详细程度的顺序是错误、警告、信息、调试、详细。除非在开发过程中,否则决不能将详细信息编译到应用程序中。调试日志在中编译,但在运行时剥离。始终保留错误、警告和信息日志

关于更多细节,库蒂斯的答案完全正确。我想补充一点:不要在
INFO
或更高级别(
WARN
/
ERROR
)上记录任何个人身份或私人信息。否则,bug报告或任何其他包括日志记录的内容都可能会受到污染。

最近(我认为)提供了一些建议,从不同的日志级别可以获得哪些有用的消息,以及Kurtis的答案: