为什么和何时应该使用Android Log类?

5
为什么和何时应该使用Android Logging?它只用于调试目的吗?如果在生产应用程序中保留,它似乎会显著减慢应用程序速度。我的问题的一个关键部分是,在什么情况下应该使用...在哪些情况下需要使用?使用它的“最佳实践”有哪些?这可能是一个非常愚蠢或业余的问题,但我从来没有理解过它的必要性或感到有必要使用它。我可能漏掉了什么。此外 - 我已经知道用于错误/冗长/信息等的日志记录是不同的,并且一些日志记录在不进行调试时被丢弃。请不要重申类概述中的信息,而不给我解释原因。谢谢!http://developer.android.com/reference/android/util/Log.html

1
在 Android 网站的发布页面上,它说你应该注释/删除所有日志记录 - 这样它就不会在生产中使用(或者至少不应该使用)。 - Ricky
1
在生产手机中,看到有多少日志没有关闭是很有趣的。有时候会记录非常有趣的消息,这些消息总是让我有希望,也许我不是最糟糕的Android程序员。 - Alexander Kulyakhtin
这并不是一个愚蠢的问题。许多人在他们的代码中使用它(例如在线教程等),但从未提及其重要性。 - Flame of udun
3个回答

4
我同意你的观点,我也从来没有真正使用过它。当试图找出发生了什么并且出现错误时,我更喜欢调试而不是日志阅读(以及单元测试而不是调试)。有些人认为,在应用程序崩溃并出现异常时记录“附加详细信息”可能很有用,但我通常回复他们说,异常本身应该在必要时包含那些附加详细信息,并在其getMessage中公开它们。因此,LogCat中包含的默认堆栈跟踪已经足够了解发生了什么。
但无论如何,有可能记录一些东西总是好的,即使到目前为止我还没有发现它真正有用,你永远不知道什么时候它可能有所帮助 :)

0

通常只有在知道出了什么问题时才会进行调试。(而且当你知道时,你可能会编写额外的测试用例。)

通过记录(例如在INFO级别),您可以添加一些附加信息以跟踪应用程序中的数据。这使您能够发现存在问题。因此,它提供了更高层次的概述。

此外,它可以轻松禁用,如果正确完成,不会显着减慢应用程序的速度,并且可能因此提供另一种方法来查看是否一切正常,具有少量缺点和一些优点。(请参见日志记录与调试,特别是@smonff's answer中的链接。)


0
关于我的评论,请参见发布前的准备。(显示日志记录应在发布前删除,因此不用于生产环境)。
Turn off logging and debugging

Make sure you deactivate logging and disable the debugging option before you build your
application for release. You can deactivate logging by removing calls to Log methods
in your source files.

前几天我使用了日志记录,我启动了另一个线程来完成一些工作,但我需要检查线程中产生的一些数据,而不是通过日志记录或显示Toast,我该如何获取这些值?我之前尝试在Eclipse中调试/逐步执行代码,但遇到了几个问题。

有了日志记录,我可以记录每个值,查看logcat并确切地知道我的代码正在做什么。


你在调试时遇到的“几个问题”本应该可以并且应该解决:尽管在多线程环境下正确使用调试有时很痛苦,但调试通常比记录日志更有效地了解底层发生了什么。在理想的世界中,如果你的单元测试覆盖率足够好,既不需要记录日志也不需要调试。 - Guillaume
有道理,但请解释一下:“调试通常比记录日志更有效,以了解底层发生了什么”,为什么会这样? - Ricky
出于许多不同的原因:如果你仔细地逐步走过,你可以看到你的线程正在遵循哪条路径(这在使用简单日志记录时可能非常困难),而当你逐步执行时,你可以详细查看任何变量状态,包括跟踪依赖关系或在运行时评估任何表达式,这对于检查特定实例的状态是非常宝贵的。 - Guillaume
另外一个很好的功能是条件断点:例如,您可以在调试模式下运行并说“每当抛出RuntimeException时停止”,然后您将看到它被抛出的位置、变量的状态等。 - Guillaume

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接