Tengo muchas declaraciones de registro para depurar, por ejemplo.
Log.v(TAG, "Message here");
Log.w(TAG, " WARNING HERE");
Al implementar esta aplicación en el teléfono del dispositivo, quiero desactivar el registro detallado desde donde puedo habilitar / deshabilitar el registro.
Respuestas:
Una forma común es crear un nivel de registro con nombre int y definir su nivel de depuración en función del nivel de registro.
Más tarde, puede cambiar el LOGLEVEL para todos los niveles de salida de depuración.
fuente
La documentación de Android dice lo siguiente sobre los niveles de registro :
Por lo tanto, es posible que desee considerar eliminar el registro de las declaraciones de registro detalladas, posiblemente utilizando ProGuard como se sugiere en otra respuesta .
De acuerdo con la documentación, puede configurar el inicio de sesión en un dispositivo de desarrollo utilizando las Propiedades del sistema. La propiedad de conjunto es
log.tag.<YourTag>
y debe ser ajustado a uno de los siguientes valores:VERBOSE
,DEBUG
,INFO
,WARN
,ERROR
,ASSERT
, oSUPPRESS
. Más información sobre esto está disponible en la documentación para elisLoggable()
método.Puede establecer propiedades temporalmente usando el
setprop
comando. Por ejemplo:Alternativamente, puede especificarlos en el archivo '/data/local.prop' de la siguiente manera:
Parece que las versiones posteriores de Android requieren que /data/local.prop sea de solo lectura . Este archivo se lee en el momento del arranque, por lo que deberá reiniciarlo después de actualizarlo. Si
/data/local.prop
se puede escribir en el mundo, es probable que se ignore.Por último, se puede establecer mediante programación utilizando el
System.setProperty()
método .fuente
android.util.Config
constantes en desuso. Los valores codificados especificados en los documentos de API son inútiles ya que estos (supuestamente) varían según la compilación. Por lo tanto, la ruta ProGuard nos pareció la mejor solución.Probablemente, la forma más fácil es ejecutar su JAR compilado a través de ProGuard antes de la implementación, con una configuración como:
Eso, aparte de todas las otras optimizaciones de ProGuard, eliminará cualquier declaración de registro detallada directamente del código de bytes.
fuente
Tomé una ruta simple: crear una clase de contenedor que también utiliza listas de parámetros variables.
fuente
La mejor manera es usar SLF4J API + parte de su implementación.
Para las aplicaciones de Android, puede usar lo siguiente:
fuente
logback-android
(ya que lologback
correcto es incompatible).logback-android-1.0.10-1.jar
es de 429 KB, lo que no está tan mal teniendo en cuenta las características proporcionadas, pero la mayoría de los desarrolladores usarían Proguard para optimizar su aplicación de todos modos.Deberías usar
fuente
Eliminar el registro con proguard (ver respuesta de @Christopher) fue fácil y rápido, pero provocó que los rastros de la pila de la producción no coincidan con la fuente si hubo algún registro de depuración en el archivo.
En cambio, aquí hay una técnica que utiliza diferentes niveles de registro en el desarrollo frente a la producción, suponiendo que proguard se use solo en la producción. Reconoce la producción al ver si proguard ha cambiado el nombre de un nombre de clase dado (en el ejemplo, uso "com.foo.Bar"; usted reemplazaría esto con un nombre de clase completamente calificado que sabe que cambiará el nombre de proguard).
Esta técnica hace uso del registro de bienes comunes.
fuente
Log4j o slf4j también se pueden usar como marcos de registro en Android junto con logcat. Vea el proyecto android-logging-log4j o log4j support en android
fuente
Hay un pequeño reemplazo directo para la clase de registro de Android estándar: https://github.com/zserge/log
Básicamente, todo lo que tiene que hacer es reemplazar las importaciones de
android.util.Log
atrikita.log.Log
. Luego, en suApplication.onCreate()
o en algún inicializador estático, verifique elBuilConfig.DEBUG
indicador o cualquier otro y useLog.level(Log.D)
oLog.level(Log.E)
para cambiar el nivel mínimo de registro. Puede usarLog.useLog(false)
para deshabilitar el registro en absoluto.fuente
Puede ser que pueda ver esta clase de extensión de registro: https://github.com/dbauduin/Android-Tools/tree/master/logs .
Le permite tener un control preciso sobre los registros. Por ejemplo, puede deshabilitar todos los registros o solo los registros de algunos paquetes o clases.
Además, agrega algunas funcionalidades útiles (por ejemplo, no tiene que pasar una etiqueta para cada registro).
fuente
Creé una utilidad / envoltorio que resuelve este problema + otros problemas comunes relacionados con el registro.
Una utilidad de depuración con las siguientes características:
¿Cómo utilizar?
He intentado que la documentación sea autosuficiente.
Las sugerencias para mejorar esta utilidad son bienvenidas.
Gratis para usar / compartir.
Descárgalo desde GitHub .
fuente
Aquí hay una solución más compleja. Obtendrá un seguimiento completo de la pila y se llamará al método toString () solo si es necesario (Rendimiento). El atributo BuildConfig.DEBUG será falso en el modo de producción, por lo que se eliminarán todos los registros de rastreo y depuración. El compilador de hot spot tiene la posibilidad de eliminar las llamadas debido a las propiedades estáticas finales.
usar así:
fuente
En un escenario de registro muy simple, donde literalmente solo está tratando de escribir en la consola durante el desarrollo con fines de depuración, podría ser más fácil simplemente hacer una búsqueda y reemplazar antes de su producción, y comentar todas las llamadas al Registro o al Sistema. out.println.
Por ejemplo, suponiendo que no haya usado el "Registro". en cualquier lugar fuera de una llamada a Log.d o Log.e, etc., simplemente puede buscar y reemplazar toda la solución para reemplazar "Log". con "// Registro". para comentar todas sus llamadas de registro, o en mi caso solo estoy usando System.out.println en todas partes, así que antes de pasar a producción simplemente haré una búsqueda completa y reemplazaré por "System.out.println" y lo reemplazaré con "//System.out.println".
Sé que esto no es ideal, y sería bueno si la capacidad de encontrar y comentar llamadas a Log and System.out.println se integrara en Eclipse, pero hasta que eso ocurra, la forma más fácil, rápida y mejor de hacerlo es comentar mediante búsqueda y reemplazo. Si hace esto, no tiene que preocuparse por los números de línea de rastreo de pila que no coinciden, porque está editando su código fuente y no está agregando ninguna sobrecarga al verificar alguna configuración de nivel de registro, etc.
fuente
En mis aplicaciones tengo una clase que envuelve la clase Log que tiene una var booleana estática llamada "estado". A lo largo de mi código verifico el valor de la variable "estado" usando un método estático antes de escribir en el Log. Luego tengo un método estático para establecer la variable "estado" que garantiza que el valor sea común en todas las instancias creadas por la aplicación. Esto significa que puedo habilitar o deshabilitar todos los registros de la aplicación en una sola llamada, incluso cuando la aplicación se está ejecutando. Útil para llamadas de soporte ... Sin embargo, significa que debe atenerse a sus armas al depurar y no retroceder al uso de la clase de registro estándar ...
También es útil (conveniente) que Java interprete una var booleana como falsa si no se le ha asignado un valor, lo que significa que se puede dejar como falsa hasta que necesite activar el registro :-)
fuente
Podemos usar la clase
Log
en nuestro componente local y definir los métodos como v / i / e / d. En función de la necesidad de podemos hacer más llamadas.El ejemplo se muestra a continuación.
aquí el mensaje es para
string
yargs
es el valor que desea imprimir.fuente
Para mí, a menudo es útil poder establecer diferentes niveles de registro para cada TAG.
Estoy usando esta clase de contenedor muy simple:
Ahora solo establezca el nivel de registro por TAG al comienzo de cada clase:
fuente
Otra forma es utilizar una plataforma de registro que tenga la capacidad de abrir y cerrar registros. Esto puede dar mucha flexibilidad a veces, incluso en una aplicación de producción cuyos registros deberían estar abiertos y cerrados, dependiendo de los problemas que tenga, por ejemplo:
fuente