自更新AS 1.1预览2以来,我的所有Log
消息
Log.d(TAG, "message");
带消息:“日志记录标记最多可包含23个字符.. ”。
除了Android Studio本身,我没有从根本上更新任何内容。这是一个错误吗?
答案 0 :(得分:43)
如果您愿意,可以将其禁用。
在Android Studio中,分析 - >检查代码。
在检查配置文件下,单击带有3个水平点的按钮。
应打开以下窗口。搜索" log"并取消选中"太长的日志标记"。
更新: Android Studio 2.2,它位于Android Lint:正确性
答案 1 :(得分:36)
不,这不是错误。
来自Android Studio's Recent Changes on 1.1 Preview 2,
检查传递给日志记录调用的标记(如果其值可以解析)最多为23个字符(根据Logging API的要求。)
正如最近对最近的更改所解释的那样,这是由于Log
API不允许标记超过23个字符。
SLF4J Android对此有一个解释:
[...]此类标签的长度目前限制为23个字符(23 = 32 - 8表示名称空间前缀 - 1表示C终结符)
目前,唯一明确提到此例外的功能是Log.isLoggable()
,
...
<强>抛出强>
如果tag.length()&gt;会抛出IllegalArgumentException 23。
但是,基于注释,显然记录器会在发布模式下抛出异常(在调试模式下会被忽略)。
您可以按照Terence's answer禁用lint检查,但您已收到警告。
答案 2 :(得分:18)
补充@Terence
的答案您还可以在build.gradle文件中通过gradle关闭特定检查:
root
或者使用xml:
将lint.xml文件添加到项目中lintOptions {
disable 'LongLogTag'
}
答案 3 :(得分:5)
您永远不会忽略此lint检查,它肯定会在您的发布版本上带来意外结果,因为它会抛出异常并停止执行(它不会导致您的应用程序崩溃)。
我最近得到了一个可怕的教训:它在调试模式下没问题,但在发布版本上表现不同。
答案 4 :(得分:4)
这是最近的更改,在此版本中,它是一个新的lint检查。哪个说,
检查传递给日志记录调用的标记(如果其值可以解析)最多为23个字符(根据Logging API的要求。)
有关详细信息,请阅读以下链接中的第3点。
https://sites.google.com/a/android.com/tools/recent/androidstudio11preview2
如果您不想这样做,请尽量减少TAG中的字符数,并确保它们的长度不超过23。
答案 5 :(得分:2)
build.gradle(应用程序)
android {
lintOptions {
disable 'LongLogTag'
} // put this.
}
答案 6 :(得分:0)
解释为什么会发生这种情况:
根据AOSP source code ,您可以使用所需的任何标签登录。问题出在Log.isLoggable
中。
Log.isLoggable
检查系统属性log.tag.<YOUR_TAG>
是否启用了要记录的优先级。这是此机制的文档:
public static boolean isLoggable (String tag, int level)
检查是否可以在指定级别记录指定标签的日志。任何标签的默认级别都设置为INFO。这意味着将记录高于或包括INFO的任何级别。在调用记录方法之前,应检查是否应记录标签。您可以通过设置系统属性:'setprop log.tag来更改默认级别。 '级别为VERBOSE,DEBUG,INFO,WARN,ERROR,ASSERT或SUPPRESS。 SUPPRESS将关闭标签的所有日志记录。您还可以创建一个其中包含以下内容的local.prop文件:'log.tag。='并将其放置在/data/local.prop中。
来源:https://developer.android.com/reference/android/util/Log#isLoggable(java.lang.String,%20int)
在API 26(Oreo)以下,系统属性键的限制为31个字符。 "log.tag.".length() + 23
等于31。如果您在Android Oreo下方调用Log.isLoggable
,且标签长于23个字符,则会抛出该标签,如in the source code所述。从Android O开始,此限制不再适用。
存在Lint规则只是为了保护您免受所有这些(通常)不必要的细节的侵害。
Log.isLoggable
的文档还指出,由于API 24(根据我的发现,这是错误的),将不会抛出IllegalArgumentException
。跟随:https://issuetracker.google.com/issues/124593220
答案 7 :(得分:0)
这个错误是为我的一个node_module库抛出的,抱怨有一个单独的node_mode库。
我在该node_module库的build gradle文件中添加了该lint options属性。
android {
lintOptions {
abortOnError false
}
}
该库是aws-amplify推送通知。
错误:
Execution failed for task ':@aws-amplify/pushnotification:lint'
文件已更新: node_modules/@aws-amplify/pushnotification/android/build.gradle