热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

日志记录标记最多可包含23个字符

如何解决《日志记录标记最多可包含23个字符》经验,为你挑选了4个好方法。

自从更新AS 1.1 Preview 2后,我的所有Log消息都显示红线

Log.d(TAG, "message");

带有消息:" 日志记录标记最多可包含23个字符.. ".

除了Android Studio本身,我没有从根本上更新任何内容.这是一个错误吗?



1> squeeish..:

如果您愿意,可以禁用它.

在Android Studio中,分析 - >检查代码.

截图

在检查配置文件下,单击带有3个水平点的按钮.

应打开以下窗口.搜索"log"并取消选中"Too Long Log Tags".

截图

更新: Android Studio 2.2,它位于Android Lint:Correctness下

截图


这有什么后果?

2> Andrew T...:

不,这不是一个错误.

来自Android Studio 1.1 Preview 2的最新更改,

检查传递给日志记录调用的标记(如果其值可以解析)最多为23个字符(根据Logging API的要求).

记录标记是31

正如最近对最近的变化所解释的,这是由于如何 Log API不允许超过23个字符的标记.

SLF4J Android对此有一个解释:

[...]此类标签的长度目前限制为23个字符(23 = 32 - 8表示名称空间前缀 - 1表示C终结符)

它与Android的源代码相匹配.

目前,唯一明确提到此异常的函数是Log.isLoggable(),

...

抛出

如果tag.length()> 23,则抛出IllegalArgumentException.

但是,根据注释,显然记录器会在发布模式下抛出异常(在调试模式下会被忽略).

您可以按照Terence的回答禁用lint检查,但是您已经收到警告.


这背后的逻辑是什么?当然错误是系统生成的,我可以获得的错误和我可以键入的字符串之间存在某种相关性,但它包含我在"字符串"中使用的ASCII字符,为什么它不允许23个字符,甚至为什么23 ?谢谢.
来自[Android源代码](https://github.com/android/platform_frameworks_base/blob/master/core/jni/android_util_Log.cpp#L84),这是由于32(属性键的最大长度) - 8(名称空间前缀) - 1(C终结符),引自[SLF4J Android](http://www.slf4j.org/android/).
这种棉绒检查只是无意义的.你可以非常肯定Android会在*Log.d`等人中开始执行此操作.因为那只会打破大量的应用程序而没有任何*好的理由.我真的希望将来可以改进lint检查,以便更严格地显示或仅仅使用`Log.isLoggable()`.
你永远不能禁用这个lint检查,因为它在发布时崩溃应用程序(最有趣的是它在调试模式下不会崩溃)

3> straya..:

补充@Terence的答案

您还可以在build.gradle文件中使用gradle关闭特定的检查:

lintOptions {
    disable 'LongLogTag'
}

或者使用xml将lint.xml文件添加到项目中:



    


你应该把`lintOptions`放在`android`块中

4> Jacky..:

你永远不能忽略这个lint检查,它肯定会在你的发布版本上带来意想不到的结果,因为它抛出异常并停止执行(它不会使你的应用程序崩溃).

我最近得到了一个可怕的教训:它在调试模式下没问题,但在发布版本上表现不同.


推荐阅读
author-avatar
玉米的跟屁虫
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有