![]() |
1
78
一种常见的方法是生成名为loglevel的int,并根据loglevel定义其调试级别。
稍后,您可以更改所有调试输出级别的日志级别。 |
![]() |
2
190
这个 Android Documentation says the following about Log Levels :
因此,您可能需要考虑将日志详细日志语句剥离出来, possibly using ProGuard as suggested in another answer .
根据文档,您可以使用系统属性在开发设备上配置日志记录。要设置的属性是
可以使用
或者,可以在文件“/data/local.prop”中指定它们,如下所示:
Android的更新版本
appear to require that /data/local.prop be read only
. 此文件在启动时读取,因此更新后需要重新启动。如果
最后,您可以使用
|
![]() |
3
88
最简单的方法可能是通过 ProGuard 在部署之前,使用如下配置:
除了所有其他的Proguard优化之外,这将直接从字节码中删除任何详细的日志语句。 |
![]() |
4
18
我采用了一种简单的方法——创建一个包装类,它还使用变量参数列表。
|
![]() |
5
10
更好的方法是使用slf4j api+它的一些实现。 对于Android应用程序,您可以使用以下功能:
|
![]() |
6
8
你应该使用
|
![]() |
7
4
用proguard剥离日志(请参阅@christopher的应答)既简单又快速,但如果文件中有任何调试日志记录,则会导致生产中的堆栈跟踪与源不匹配。 相反,这里有一种在开发和生产中使用不同日志级别的技术,假设Proguard仅用于生产。它通过查看proguard是否重命名了给定的类名来识别产品(在本例中,我使用“com.foo.bar”--您可以用一个完全限定的类名替换它,您知道它将被proguard重命名)。 这种技术利用了公共日志记录。
|
![]() |
8
3
log4j或slf4j也可以与logcat一起用作Android中的日志框架。看到这个项目 android-logging-log4j 或 log4j support in android |
![]() |
9
3
标准android日志类的替代品略有下降。- https://github.com/zserge/log
基本上你要做的就是替换进口
|
![]() |
10
2
可能您可以看到这个日志扩展类: https://github.com/dbauduin/Android-Tools/tree/master/logs . 它使您能够对日志进行精细的控制。 例如,您可以禁用所有日志,或者仅禁用某些包或类的日志。 此外,它还添加了一些有用的功能(例如,不必为每个日志传递标记)。 |
![]() |
11
2
我创建了一个实用程序/包装器,它解决了这个问题以及日志记录的其他常见问题。 具有以下功能的调试实用程序:
如何使用?
我试图使文件具有自足性。 欢迎提出改进此实用程序的建议。 免费使用/分享。 从下载 GitHub . |
![]() |
12
2
这里有一个更复杂的解决方案。您将获得完整的堆栈跟踪,并且仅在需要时调用toString()方法(性能)。在生产模式下,buildconfig.debug属性将为false,因此将删除所有跟踪和调试日志。热点编译器有机会删除调用,因为它脱离了最终的静态属性。
这样使用:
|
![]() |
13
1
在一个非常简单的日志场景中,您实际上只是为了调试而在开发过程中尝试写入控制台,在生产构建之前进行搜索和替换,并注释掉所有对Log或System.out.println的调用可能是最简单的。 例如,假设您没有在log d.d或log e.e等调用之外的任何地方使用“log.”,您只需在整个解决方案中执行查找和替换操作,将“log.”替换为“//log”。若要注释掉您的所有日志调用,或者在我的情况下,我只是在任何地方使用system.out.println,所以在开始生产之前,我只需执行完整的s搜索并替换为“system.out.println”,替换为“//system.out.println”。 我知道这并不理想,如果能找到并评论对log和system.out.println的调用的能力是内置在Eclipse中的,那就太好了,但是在这之前,最简单、最快速和最好的方法是通过搜索和替换来评论。如果这样做,就不必担心堆栈跟踪行号不匹配,因为您正在编辑源代码,并且通过检查一些日志级配置等不会增加任何开销。 |
![]() |
14
1
在我的应用程序中,我有一个类,它包含一个名为“state”的静态布尔变量的日志类。在整个代码中,在实际写入日志之前,我使用静态方法检查“state”变量的值。然后,我有一个静态方法来设置“state”变量,它确保该值在应用程序创建的所有实例中都是通用的。这意味着我可以在一次通话中启用或禁用应用程序的所有日志记录,即使应用程序正在运行。对支持呼叫有用…它确实意味着在调试时必须坚持使用枪,而不是回归到使用标准的日志类。 它也很有用(方便),如果没有分配一个值,Java将布尔var解释为false,这意味着它可以被保留为假,直到需要打开日志记录: |
![]() |
15
1
我们可以上课
这是给你的留言
|
![]() |
16
0
对于我来说,能够为每个标记设置不同的日志级别通常很有用。 我正在使用这个非常简单的包装类:
现在只需在每个类的开头设置每个标记的日志级别:
|
![]() |
17
0
另一种方法是使用具有打开和关闭日志功能的日志平台。有时甚至在生产应用程序上,这可以提供很大的灵活性,哪些日志应该打开,哪些日志应该关闭,这取决于您有哪些问题。 例如:
|
![]() |
Abdullah Chaudhry · json文件上的文件旋转和删除 1 年前 |
![]() |
Max S · 如何从CMD读取日志的所有输出 6 年前 |
![]() |
Ivan Denchev · Apache-过去一小时的日志 6 年前 |
![]() |
ninja.coder · Log4j中的字符串串联性能 6 年前 |
![]() |
Rich · 如何记录日志。是否与操作员一起调试? 6 年前 |