Das Logging-Tag darf maximal 23 Zeichen lang sein

Lesezeit: 6 Minuten

Benutzeravatar von TomCB
TomCB

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


Benutzeravatar von terencey
terencey

Sie können es deaktivieren, wenn Sie dies wünschen.

In Android Studio Analysieren -> Code prüfen.

Bildschirmfoto

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“.

Bildschirmfoto

Aktualisieren: Android Studio 2.2, es befindet sich unter Android Lint: Korrektheit

Bildschirmfoto

  • 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. :/

    – Neon Warge

    15. Juni 2016 um 13:00 Uhr

Benutzeravatar von Andrew T
Andreas T.

Nein, es ist kein Fehler.

Von Die letzten Änderungen von Android Studio in 1.1 Preview 2,

Ü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).

Logging-Tag war 31

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.

SLF4J-Android hat dazu eine Erklärung:

[…] die Länge solcher Tags ist derzeit auf 23 Zeichen begrenzt (23 = 32 – 8 für Namespace-Präfix – 1 für C-Terminator)

was zu dem passt Quellcode von Android.

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

Benutzeravatar von straya
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:

<?xml version="1.0" encoding="UTF-8"?>
<lint>
    <issue id="LongLogTag" severity="ignore" />
</lint>

  • 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

Benutzeravatar von LiangWang
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.

Benutzeravatar von Vilas
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.

https://sites.google.com/a/android.com/tools/recent/androidstudio11preview2

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-Quellcode Sie 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.

Quelle: https://developer.android.com/reference/android/util/Log#isLoggable(java.lang.String,%20int)

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.

    – dragi

    2. April 2015 um 8:30 Uhr

Benutzeravatar von Jin Lim
Jin Lim

Lösung. Jahr 2020 ver.

build.gradle (App)

android {
    lintOptions {
        disable 'LongLogTag'
    } // put this. 
}

1438570cookie-checkDas Logging-Tag darf maximal 23 Zeichen lang sein

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy