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

不同的LogCat方法是:

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

使用每种types的日志logging有什么合适的情况? 我知道,也许这只是一些语义,也许它并不重要,但是对于Android Studio和Eclipse中的LogCat过滤,最好知道我在适当的时候使用了正确的方法。

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

  • Log.e :这是为了什么时候坏的事情发生。 使用这个标签的地方就像一个catch语句。 您知道发生了错误,因此您logging了错误。

  • Log.w :当你怀疑有黑幕时,使用这个。 你可能不完全在错误模式,但也许你从一些意想不到的行为恢复。 基本上,使用这个来logging你不希望发生的事情,但不一定是错误。 有点像“嗨,这发生了,这很奇怪,我们应该看看它。

  • Log.i :使用它将有用的信息发送到日志。 例如:您已成功连接到服务器。 基本上用它来报告成功。

  • Log.d :用于debugging目的。 如果你想打印出一堆信息,以便logging你的程序的确切stream程,使用这个。 如果你想保留一个variables值的日志,使用这个。

  • Log.v :当你想完全坚持你的日志logging时使用它。 如果由于某种原因,您决定在应用的特定部分logging每一件小事,请使用Log.v标签。

作为奖励…

  • Log.wtf :当东西变得绝对,可怕,圣洁的错误使用这个。 你知道这些catch块在哪里你捕捉错误,你永远不应该得到…是啊,如果你想logging他们使用Log.wtf

不同的方法是优先的指示。 正如你列出他们,他们至less是最重要的。 我认为,如何将代码专门映射到代码中debugging日志取决于您正在使用的组件或应用程序,以及Android如何在不同的构build版本(eng,userdebug和user)上处理它们。 我在Android的本地守护进程中做了相当多的工作,这就是我如何做的。 它可能不会直接应用到您的应用程序,但可能有一些共同点。 如果我的解释听起来含糊不清,那是因为其中一些更多的是艺术而不是科学。 我的基本规则是要尽可能高效,确保您可以合理地debugging组件,而不会影响系统的性能,并始终检查错误并将其logging下来。

V – 不同间隔的状态打印输出,或组件处理的任何事件。 也可能非常详细地打印出我的组件接收或发送的消息/事件的有效载荷。

D – 组件中发生的次要事件的细节,以及组件接收或发送的消息/事件的有效负载。

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

W – 发生的exception或可疑的事情,但不一定是错误。

电子错误(E-Errors),意思是当事情按照应有的方式工作时,不应该发生的事情。

我所看到的最大的错误是他们过度使用V,D和I这些东西,但从来不使用W或E.如果根据定义,错误不应该发生,或者应该只发生很less的事情,那么它是非常便宜为您logging消息发生时。 另一方面,如果每次有人按下某个键,都会执行Log.i(),则会滥用共享日志logging资源。 当然,使用常识,并小心错误日志以外的东西控制(如networking错误),或包含在紧密循环中的东西。

也许不好

 Log.i("I am here"); 

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

考虑到这一切,代码越接近“生产准备”,越可以限制代码的基本日志logging级别(在alpha中需要V,在testing中需要V,在生产中需要V,甚至可能在生产中需要W )。 您应该运行一些简单的用例并查看日志,以确保在应用更严格的过滤时仍然可以大致了解发生的情况。 如果你使用下面的filter运行,你仍然应该能够告诉你的应用程序正在做什么,但可能没有得到所有的细节。

 logcat -v threadtime MyApp:I *:S 

源代码提供了一些基本的指导:

冗长的顺序,从最less到最多是ERROR,WARN,INFO,DEBUG,VERBOSE。 除了在开发过程中,绝不应该将Verbose编译成应用程序。 debugging日志被编译,但在运行时剥离。 错误,警告和信息日志始终保持不变。

更多细节,柯蒂斯的答案已经死了。 我只是补充一点:不要在INFO或更高版本上logging任何私人/个人身份信息(WARN / ERROR)。 否则,错误报告或包含日志logging的任何其他内容可能会受到污染。

我认为这些不同types的日志logging的重点是如果你希望你的应用程序基本上自我过滤自己的日志。 因此,Verbose可能会在您的应用程序中绝对logging所有重要事项,然后debugging级别将logging详细日志的子集,然后Info级别将loggingdebugging日志的子集。 当你回到错误日志,那么你只是想logging任何可能发生的错误。 还有一个名为Fatal的debugging级别,用于在应用程序中真正遇到粉丝的情况。

一般来说,你是对的,它基本上是任意的,你可以定义什么是debugging日志与信息,对比和错误等。

Android Studio网站最近(我认为)提供了一些build议,可以从不同的日志级别期望什么样的消息,这可能会与Kurtis的答案一起使用:

  • 详细 – 显示所有日志消息(默认)。
  • debugging – 显示仅在开发期间有用的debugging日志消息,以及在此列表中较低的消息级别。
  • 信息 – 显示常规使用的预期日志消息以及此列表中较低的消息级别。
  • 警告 – 显示尚未出错的可能问题,以及此列表中较低的消息级别。
  • 错误 – 显示导致错误的问题,以及此列表中较低的消息级别。
  • 断言 – 显示开发人员期望的问题不应该发生。