Seit dem Update AS 1.1 Preview 2 bekomme ich rote Linien unter allen meinen Log Mitteilungen
Log.d(TAG, "message");
Mit Meldung: „Das Logging-Tag darf maximal 23 Zeichen lang sein.“.
Ich habe nichts grundlegend aktualisiert, außer Android Studio selbst. Ist das ein Fehler?
Anscheinend macht sich der Fehler bei der Länge des Tags bemerkbar gleich zu, bzw größer als, 23 Zeichen: java.lang.IllegalArgumentException: Log tag "tag.with.exactly.23.chs" exceeds limit of 23 characters. Ich verwende Android Studio 2.x.
– Daniel
24. August 2016 um 15:10 Uhr
terencey
Sie können es deaktivieren, wenn Sie dies wünschen.
In Android Studio Analysieren -> Code prüfen.
Klicken Sie unter Inspektionsprofil auf die Schaltfläche mit den 3 horizontalen Punkten.
Das folgende Fenster sollte sich öffnen. Suchen Sie nach „log“ und deaktivieren Sie „Too Long Log Tags“.
Aktualisieren: Android Studio 2.2, es befindet sich unter Android Lint: Korrektheit
Was sind die Folgen davon?
– Joopp
1. Mai 2015 um 15:54 Uhr
Nette Beratung! Es wirkt wie ein Zauber. Übrigens, was ist der Zweck, lange Tags zu verhindern?
– 김준호
14. Juli 2015 um 2:22 Uhr
@Joop und 김준호 Ich habe keine Ahnung, Android Studio beschränkt aus irgendeinem Grund lange Tag-Namen.
– terencey
20. Juli 2015 um 5:03 Uhr
Wo ist das Analyze->Inspect Code gefunden werden?
– Neon Warge
14. Juni 2016 um 4:11 Uhr
Inspect code for me führt eine Inspektion durch, die nicht annähernd so aussieht, wie die Benutzeroberfläche auf dem Bild von Ihnen aussieht. :/
Überprüft, ob das an die Protokollierungsaufrufe übergebene Tag, sofern sein Wert aufgelöst werden kann, höchstens 23 Zeichen lang ist (wie von der Protokollierungs-API gefordert).
Wie kurz zu den jüngsten Änderungen erklärt, liegt es daran, wie Log Die API lässt kein Tag zu, das länger als 23 Zeichen ist.
Derzeit ist die einzige Funktion, die diese Ausnahme ausdrücklich erwähnt, Log.isLoggable(),
…
Wirft
IllegalArgumentException wird ausgelöst, wenn tag.length() > 23 ist.
Basierend auf den Kommentaren löst der Logger jedoch anscheinend die Ausnahme im Release-Modus aus (sie wird im Debug-Modus ignoriert).
Sie können die Flusenprüfung deaktivieren, indem Sie Terences Antwort folgen, aber Sie wurden gewarnt.
Welche Logik steckt dahinter. Sicher, der Fehler wird vom System generiert und es gibt eine gewisse Korrelation zwischen Fehlern, die ich bekommen kann, und Zeichenfolgen, die ich eingeben kann, aber er besteht aus ASCII-Zeichen, die ich in meiner “Zeichenfolge” verwende. Warum sollte er nicht 23 Zeichen zulassen und warum genau 23 ? Vielen Dank.
– Иво Недев
16. März 2015 um 11:55 Uhr
Von Android-Quellcodeliegt es an 32 (maximale Länge des Eigenschaftsschlüssels) – 8 (Namespace-Präfix) – 1 (C-Terminator), wie zitiert aus SLF4J-Android.
– Andreas T.
17. März 2015 um 12:05 Uhr
Diese Flusenkontrolle ist so wie sie ist einfach Unsinn. Sie können ziemlich sicher sein, dass Android dies tun wird nicht beginnen, dies durchzusetzen Log.d et al. denn das würde nur jede Menge Apps kaputt machen beliebig guter Grund. Ich hoffe wirklich, dass die Flusenprüfung in Zukunft verbessert wird, um entweder weniger streng oder nur bei Verwendung von angezeigt zu werden Log.isLoggable().
– zapl
10. Juli 2015 um 17:10 Uhr
Sie können diese Flusenprüfung NIEMALS deaktivieren, da sie die App in der Veröffentlichung zum Absturz bringt (das Lustigste ist, dass sie im Debug-Modus nicht abstürzt).
– LiangWang
14. Januar 2016 um 0:11 Uhr
@HeathBorders Beachten Sie, dass das Zitat, das Sie gegeben haben, einen Tippfehler hatte. Derzeit sagen die Dokumente: IllegalArgumentException is thrown if the tag.length() > 23 for Nougat (7.0) and prior releases (API <= 25), there is no tag limit of concern after this API level. – nachdem dies behoben wurde issuetracker.google.com/issues/124593220
– arekolek
12. Mai 2021 um 16:11 Uhr
Streuner
Ergänzung der Antwort von @Terence
Sie können die spezifische Überprüfung über Gradle auch hiermit in Ihrer build.gradle-Datei deaktivieren:
lintOptions {
disable 'LongLogTag'
}
Oder indem Sie Ihrem Projekt mit xml eine lint.xml-Datei hinzufügen:
Beide Lösungen scheinen für mich nicht für Android Studio 1.4 zu funktionieren. Es kann keine lintOptions in Gradle finden und -Tags-Fehler für mich ausgeben. :/
– Neon Warge
13. Februar 2016 um 3:02 Uhr
Du solltest setzen lintOptions Innerhalb android Block
– Ajmal Salim
20. Juli 2016 um 9:41 Uhr
Das ist die richtige und hilfreiche Antwort. Vielen vielen Dank, Sir.
– Prinz Dholakiya
31. August 2018 um 5:29 Uhr
LiangWang
Sie können diese Flusenprüfung niemals ignorieren, sie könnte definitiv zu unerwarteten Ergebnissen in Ihrer Release-Version führen, da sie Ausnahmen auslöst und die Ausführung stoppt (es würde Ihre App nicht zum Absturz bringen).
Ich habe kürzlich eine schreckliche Lektion gelernt: Im Debug-Modus ist es in Ordnung, aber in der Release-Version verhält es sich anders.
Vilas
Dies ist eine kürzliche Änderung und in diesem Build ist es eine neue Flusenprüfung. Was sagt,
Überprüft, ob das an die Protokollierungsaufrufe übergebene Tag, sofern sein Wert aufgelöst werden kann, höchstens 23 Zeichen lang ist (wie von der Protokollierungs-API gefordert).
Weitere Informationen finden Sie im dritten Punkt im folgenden Link.
Wenn Sie dies nicht erhalten möchten, minimieren Sie die Anzahl der Zeichen in Ihrem TAG und stellen Sie sicher, dass sie die Länge von nicht mehr als 23 überschreiten.
Im Moment enthält der bereitgestellte Link nicht das Zitat, das Sie haben. Daher sollten Sie immer den wichtigsten Teil angeben, z. B. warum diese Fusselkontrolle hinzugefügt wird.
– dragi
2. April 2015 um 8:30 Uhr
Um zu erklären, warum dies geschieht:
Nach AOSP-QuellcodeSie können sich mit jedem beliebigen Tag anmelden. Das Problem ist drin Log.isLoggable.
Log.isLoggable überprüft die Systemeigenschaft log.tag.<YOUR_TAG> wenn die Priorität, die Sie protokollieren möchten, aktiviert ist. Hier ist die Dokumentation dieses Mechanismus:
public static boolean isLoggable (String tag, int level)
Überprüft, ob ein Protokoll für das angegebene Tag auf der angegebenen Ebene protokollierbar ist. Die Standardebene aller Tags ist auf INFO eingestellt. Das bedeutet, dass jede Ebene über und einschließlich INFO protokolliert wird. Bevor Sie eine Protokollierungsmethode aufrufen, sollten Sie überprüfen, ob Ihr Tag protokolliert werden soll. Sie können die Standardebene ändern, indem Sie eine Systemeigenschaft festlegen: ‘setprop log.tag. ‘ Wobei level entweder VERBOSE, DEBUG, INFO, WARN, ERROR, ASSERT oder SUPPRESS ist. UNTERDRÜCKEN schaltet die gesamte Protokollierung für Ihr Tag aus. Sie können auch eine local.prop-Datei erstellen, die Folgendes enthält: „log.tag.=“ und diese in /data/local.prop platzieren.
Unterhalb von API 26 (Oreo) lag die Grenze für Systemeigenschaftenschlüssel bei 31 Zeichen. Und "log.tag.".length() + 23 entspricht 31. Wenn Sie anrufen Log.isLoggable unter Android Oreo mit einem Tag länger als 23 Zeichen wird es wie beschrieben ausgelöst im Quellcode. Seit Android O gilt diese Grenze nicht mehr.
Die Lint-Regel existiert nur, um Sie vor all diesen (normalerweise) unnötigen Details zu schützen.
Die Dokumentation für Log.isLoggable sagt auch die IllegalArgumentException Wille nicht seit API 24 geworfen werden, was nach meinen Erkenntnissen falsch ist. Folgen: https://issuetracker.google.com/issues/124593220
Im Moment enthält der bereitgestellte Link nicht das Zitat, das Sie haben. Daher sollten Sie immer den wichtigsten Teil angeben, z. B. warum diese Fusselkontrolle hinzugefügt wird.
Anscheinend macht sich der Fehler bei der Länge des Tags bemerkbar gleich zu, bzw größer als, 23 Zeichen:
java.lang.IllegalArgumentException: Log tag "tag.with.exactly.23.chs" exceeds limit of 23 characters
. Ich verwende Android Studio 2.x.– Daniel
24. August 2016 um 15:10 Uhr