compatibilidad con log4j en Android

Estoy intentando calzarme un SDK existente en un dispositivo Android y una de las dependencias de dicho SDK es Apache log4j. Puedo cargar mi progtwig de prueba en el emulador de Android, pero cuando se llama al objeto log4j “PropertySetter”, el progtwig falla con una excepción de verificación. ¿Hay alguna forma de mejorar este problema?

En realidad, el uso de slf4j resultó ser un proceso notablemente indoloro para mí, y parece ser el caso común, al menos para las bibliotecas que usan funciones de log4j sencillas. Realmente no necesita cambiar slf4j por log4j, solo agregue dos bibliotecas slf4j a su proyecto desde http://www.slf4j.org/download.html :

– La biblioteca slf4j para Android (actualmente slf4j-android-1.6.1-RC1.jar)
– el puente log4j sobre slf4j ( http://www.slf4j.org/legacy.html#log4j-over-slf4j ).

Este último define las clases core log4j utilizadas por las implementaciones típicas y las vincula a la implementación slf4j de Android. Una vez que se agregan las bibliotecas, el código funciona.

Logon log4j trabajando exitosamente en Android con un Socket Appender y Log4j Chainsaw. Todo el código está ubicado en este repository. Slf4j configurado y funcionando también. Tenga en cuenta que debe configurarlo programáticamente. No puede usar archivos .properties o .xml, el analizador no funciona en Android. Disfrutar.

https://sourceforge.net/projects/log4j-android/

Hay un nuevo proyecto, que habilita log4j en Android. También es posible usar log4j sobre slf4j. También proporciona un appender para LogCat. Consulte Iniciar sesión en Android usando Log4J .

El siguiente ejemplo muestra cómo configurar y usar log4j en Android.

Configurar el sistema log4j en Android

import org.apache.log4j.Level; import android.os.Environment; import de.mindpipe.android.logging.log4j.LogConfigurator; /** * Simply place a class like this in your Android applications classpath. */ public class ConfigureLog4J { static { final LogConfigurator logConfigurator = new LogConfigurator(); logConfigurator.setFileName(Environment.getExternalStorageDirectory() + "myapp.log"); logConfigurator.setRootLevel(Level.DEBUG); // Set log level of a specific logger logConfigurator.setLevel("org.apache", Level.ERROR); logConfigurator.configure(); } } 

Iniciando sesión en Android usando log4j usando la API slf4j

 import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class ExampleLog4JOverSLF4J { private final Logger log = LoggerFactory.getLogger(ExampleLog4JOverSLF4J.class); public void myMethod() { log.info("This message should be seen in log file and logcat"); } } 

Iniciando sesión en Android usando log4j API

 import org.apache.log4j.Logger; public class ExampleLog4J { private final Logger log = Logger.getLogger(LogConfiguratorTest.class); public void myMethod() { log.info("This message should be seen in log file and logcat"); } } 

Recomendaría intentar intercambiar slf4j en lugar de log4j. No es un cambio indoloro, pero es probable que sea más fácil que lo que tienes. slf4j proporciona un front-end común para varios registradores incluyendo log4j y hay un paquete slf4j-android.

No, el mecanismo de registro de Android no es decente. Es muy inadecuado en comparación con lo que log4j puede hacer por usted.

El analizador sintáctico de los archivos de configuración de log4j no es compatible con Android. La compatibilidad con Android de android.slf4j con log4j simplemente anula las clases log4j que usará y los obliga a usar el registro de estilo de logcat de Android. Aún no obtienes la flexibilidad total de log4j en Android. Porticé log4j en android en mi proyecto https://sourceforge.net/projects/log4j-android/ todo lo que tienes que hacer es agregar los dos archivos jar en el directorio de binarios a classpath. Entonces

 static { org.apache.log4j.Logger root = org.apache.log4j.Logger.getRootLogger(); final SocketAppender appender = new SocketAppender("192.168.1.4", 4445); root.addAppender(appender); } private static final org.slf4j.Logger logger = LoggerFactory.getLogger(MyClass.class); static { logger.info("Hello logger"); } 

Esto comenzará a enviar mensajes al host remoto que especificó. A continuación, puede ver estos mensajes con Chainsaw http://logging.apache.org/log4j/docs/webstart/chainsaw/chainsawWebStart.jnlp . Para hacer que la motosierra funcione, haga clic en la segunda checkbox en el cuadro de diálogo que aparece, haga clic en Aceptar, inicie su aplicación y aparecerá una nueva pestaña. Tenga en cuenta que su firewall podría bloquearlo …

Vea este proyecto para una implementación completa: http://code.google.com/p/log4j-android/