La etiqueta de registro puede tener como máximo 23 caracteres

7 minutos de lectura

Avatar de usuario de TomCB
TomCB

Desde la actualización AS 1.1 Preview 2, veo líneas rojas debajo de todos mis Log mensajes

Log.d(TAG, "message");

Con mensaje: “La etiqueta de registro puede tener como máximo 23 caracteres.“.

No actualicé nada fundamentalmente, excepto el propio Android Studio. ¿Es esto un error?

  • Aparentemente el error se manifiesta cuando la longitud de la etiqueta es igual a, o mayor que que, 23 caracteres: java.lang.IllegalArgumentException: Log tag "tag.with.exactly.23.chs" exceeds limit of 23 characters. Estoy usando Android Studio 2.x.

    – Daniel

    24 de agosto de 2016 a las 15:10


avatar de usuario de terencey
terencey

Puede desactivarlo si así lo desea.

En Android Studio, Analizar->Inspeccionar código.

captura de pantalla

En Perfil de inspección, haga clic en el botón con los 3 puntos horizontales.

Debería abrirse la siguiente ventana. Busque “registro” y desmarque “Etiquetas de registro demasiado largas”.

captura de pantalla

Actualizar: Android Studio 2.2, se encuentra en Android Lint: Corrección

captura de pantalla

  • ¿Cuales son las consecuencias de esto?

    – Joop

    1 mayo 2015 a las 15:54

  • ¡Buen consejo! Funciona a las mil maravillas. Por cierto, ¿cuál es el propósito de prevenir etiquetas largas?

    – 김준호

    14 de julio de 2015 a las 2:22


  • @Joop y 김준호 No tengo idea, Android Studio está restringiendo nombres de etiquetas largos por alguna razón.

    – Terencey

    20 de julio de 2015 a las 5:03

  • Donde está esto Analyze->Inspect Code ¿ser encontrado?

    – Guerra de neón

    14 de junio de 2016 a las 4:11

  • Inspeccionar el código para mí ejecuta una inspección, no se parece en nada a cómo se ve la interfaz de usuario en la imagen tuya. :/

    – Guerra de neón

    15/06/2016 a las 13:00

Avatar de usuario de Andrew T.
andres t

No, no es un error.

De Cambios recientes de Android Studio en 1.1 Preview 2,

Comprueba que la etiqueta pasada a las llamadas de registro, si su valor se puede resolver, tiene como máximo 23 caracteres (según lo requiere la API de registro).

la etiqueta de registro era 31

Como se explicó brevemente sobre los cambios recientes, se debe a cómo Log La API no permite etiquetas que excedan los 23 caracteres.

Android SLF4J tiene una explicacion para esto:

[…] la longitud de dichas etiquetas actualmente está limitada a 23 caracteres (23 = 32 – 8 para el prefijo del espacio de nombres – 1 para el terminador C)

que coincide con el código fuente de Android.

Actualmente, la única función que menciona explícitamente esta excepción es Log.isLoggable(),

Lanza

Argumento de excepción ilegal se lanza si la etiqueta.longitud() > 23.

Sin embargo, según los comentarios, aparentemente el registrador arroja la excepción en el modo de liberación (se ignora en el modo de depuración).

Puede deshabilitar la verificación de pelusa siguiendo la respuesta de Terence, pero ha sido advertido.

  • Cuál es la lógica detrás de esto. Claro que el error es generado por el sistema y existe cierta correlación entre los errores que puedo obtener y las cadenas que puedo escribir, pero consiste en caracteres ASCII que uso en mi “cadena”, ¿por qué no permitiría 23 caracteres e incluso por qué 23 exactamente? ? Gracias.

    – Иво Недев

    16 de marzo de 2015 a las 11:55

  • De código fuente de Androidse debe a 32 (longitud máxima de la clave de propiedad) – 8 (prefijo de espacio de nombres) – 1 (terminador C), como se cita en Android SLF4J.

    – Andrés T.

    17 de marzo de 2015 a las 12:05

  • Esta verificación de pelusa es una tontería tal como es. Puede estar bastante seguro de que Android no empezar a hacer cumplir esto en Log.d et al. ya que eso rompería toneladas de aplicaciones sin alguna buena razón. Realmente espero que la verificación de pelusa se mejore en el futuro para que se muestre con menos severidad o solo en los usos de Log.isLoggable().

    – zapl

    10 de julio de 2015 a las 17:10


  • NUNCA puede deshabilitar esta verificación de pelusa ya que bloquea la aplicación en el lanzamiento (lo más divertido es que no se bloquea en el modo de depuración)

    – LiangWang

    14 de enero de 2016 a las 0:11

  • @HeathBorders tenga en cuenta que la cita que dio tenía un error tipográfico, actualmente los documentos dicen: 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. – después de que esto se arregló en tematracker.google.com/issues/124593220

    – arekolek

    12 mayo 2021 a las 16:11

avatar de usuario de straya
callejera

Complementando la respuesta de @Terence

También puede desactivar la verificación específica a través de gradle con esto en su archivo build.gradle:

lintOptions {
    disable 'LongLogTag'
}

O agregando un archivo lint.xml a su proyecto con xml:

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

  • ambas soluciones no parecen funcionar para Android Studio 1.4 para mí. No puede encontrar lintOptions en Gradle y etiqueta errores para mí. :/

    – Guerra de neón

    13 de febrero de 2016 a las 3:02


  • deberías poner lintOptions en el interior android bloquear

    –Ajmal Salim

    20 de julio de 2016 a las 9:41

  • Esta es la respuesta correcta y útil. Muchas gracias señor.

    – Príncipe Dholakiya

    31 de agosto de 2018 a las 5:29

Avatar de usuario de LiangWang
LiangWang

Nunca puede ignorar esta verificación de pelusa, definitivamente podría generar resultados inesperados en su versión de lanzamiento, ya que arroja excepciones y deja de ejecutarse (no bloquearía su aplicación).

Recientemente aprendí una terrible lección: está bien en el modo de depuración, pero se comporta de manera diferente en la versión de lanzamiento.

Avatar de usuario de Vilas
Villas

Este es un cambio reciente y en esta compilación, es una nueva verificación de pelusa. que dice,

Comprueba que la etiqueta pasada a las llamadas de registro, si su valor se puede resolver, tiene como máximo 23 caracteres (según lo requiere la API de registro).

Para obtener más información, lea el tercer punto en el siguiente enlace.

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

Si no desea obtener esto, minimice la cantidad de caracteres en su ETIQUETA y asegúrese de que no superen la longitud de 23.

  • Por el momento, el enlace proporcionado no contiene la cita que tiene. Por lo tanto, siempre debe incluir la parte más esencial, como por qué se agrega este control de pelusa.

    – dragi

    2 abr 2015 a las 8:30

Para explicar por qué sucede esto:

De acuerdo a código fuente AOSP puedes iniciar sesión con cualquier etiqueta que quieras. el problema esta en Log.isLoggable.

Log.isLoggable comprueba la propiedad del sistema log.tag.<YOUR_TAG> si la prioridad que desea registrar está habilitada. Aquí está la documentación de este mecanismo:

public static boolean isLoggable (String tag, int level)

Comprueba si un registro para la etiqueta especificada se puede registrar en el nivel especificado. El nivel predeterminado de cualquier etiqueta se establece en INFO. Esto significa que se registrará cualquier nivel superior que incluya INFO. Antes de realizar cualquier llamada a un método de registro, debe verificar si su etiqueta debe registrarse. Puede cambiar el nivel predeterminado configurando una propiedad del sistema: ‘setprop log.tag. ‘ Donde el nivel es VERBOSE, DEBUG, INFO, WARN, ERROR, ASSERT o SUPPRESS. SUPPRESS desactivará todos los registros de su etiqueta. También puede crear un archivo local.prop que contenga lo siguiente: ‘log.tag.=’ y colocarlo en /data/local.prop.

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

Por debajo de API 26 (Oreo), el límite de claves de propiedad del sistema era de 31 caracteres. Y "log.tag.".length() + 23 es igual a 31. Si llamas Log.isLoggable debajo de Android Oreo con una etiqueta de más de 23 caracteres arrojará, como se describe en el código fuente. Desde Android O, este límite ya no se aplica.

La regla Lint existe solo para protegerlo de todos estos detalles (generalmente) innecesarios.


la documentación para Log.isLoggable también declara el IllegalArgumentException voluntad no ser lanzado desde API 24, que según mis hallazgos, es incorrecto. Seguir: https://issuetracker.google.com/issues/124593220

  • Por el momento, el enlace proporcionado no contiene la cita que tiene. Por lo tanto, siempre debe incluir la parte más esencial, como por qué se agrega este control de pelusa.

    – dragi

    2 abr 2015 a las 8:30

Avatar de usuario de Jin Lim
jin lim

Solución. Versión del año 2020.

build.gradle (aplicación)

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

¿Ha sido útil esta solución?