Registros de escritura de Android en un archivo de texto
Estoy intentando escribir registros en un archivo Log.txt personalizado en un archivo de Android usando este código mío, pero este método crea un archivo pero no contiene nada. Básicamente quiero leer el contenido anterior del archivo y luego agregar mis datos al contenido existente.
El código es el siguiente :
public static void write(String str)
{
InputStream fileInputStream = null;
FileOutputStream fileOutpurStream = null;
try
{
fileInputStream = new FileInputStream(file);
fileOutpurStream = new FileOutputStream(file);
if(file.exists())
{
int ch = 0;
int current = 0;
StringBuffer buffer = new StringBuffer();
while((ch = fileInputStream.read()) != -1)
{
buffer.append((char) ch);
current++;
}
byte data[]=new byte[(int)file.length()];
fileInputStream.read(data);
fileOutpurStream.write(data);
fileOutpurStream.write(str.getBytes(),0,str.getBytes().length);
fileOutpurStream.flush();
}
else
{
file.createNewFile();
fileOutpurStream.write(str.getBytes(),0,str.getBytes().length);
fileOutpurStream.flush();
}
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
try
{
fileInputStream.close();
fileOutpurStream.flush();
fileOutpurStream.close();
fileOutpurStream = null;
fileInputStream = null;
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Espero que esto pueda ayudar...
public void appendLog(String text)
{
File logFile = new File("sdcard/log.file");
if (!logFile.exists())
{
try
{
logFile.createNewFile();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
try
{
//BufferedWriter for performance, true to set append to file flag
BufferedWriter buf = new BufferedWriter(new FileWriter(logFile, true));
buf.append(text);
buf.newLine();
buf.close();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Para aquellos nuevos en el registro de Java en general y en el registro de Android
- Log4j es una implementación genérica de registro de Java y ahora es un proyecto de la base de software Apache. No es específico de Android y por eso tiene algunas incompatibilidades con Android.
- SL4J no es una implementación de registro, es una capa de abstracción. Ayuda a evitar situaciones como que cada biblioteca de terceros dependa de un proyecto, intentando utilizar su propia implementación de registro como Log4j. Fuente .
Algunas opciones para iniciar sesión en txt en Android se encuentran a continuación
- Utilice
logcat -f
como en esta respuesta para iniciar sesión en el archivo. Tenga en cuenta que a partir de Android 4.2, el permiso READ_LOGS no tiene ningún impacto y cada aplicación (a menos que el teléfono esté rooteado) solo puede leer sus propios registros. La desventaja aquí es que el búfer logcat es circular y tiene un límite de tamaño. Es posible que no obtenga registros anteriores. - Utilice microlog4android (escrito para dispositivos móviles como Android) como en la respuesta anterior . Podría haber una manera, pero no pude entender, cómo usar microlog4Android para iniciar sesión en el almacenamiento interno de la aplicación. La única opción para la ruta de los registros era el almacenamiento externo como la tarjeta SD, por lo que no podía usarlo.
Utilice Log4j con android-logging-log4j . ¿Qué hace android-logging-log4j? Hace que Log4j sea más fácil de usar en Android al ofrecer dos funciones.
- opción para enviar registros a logcat además del archivo de registro
- una forma sencilla de configurar las opciones de configuración de Log4j, como la ruta del archivo, el tamaño máximo del archivo, la cantidad de copias de seguridad, etc., proporcionando la clase LogConfigurator.
Ejemplo sencillo a continuación. Observe que
logger
el objeto en el siguiente ejemplo es un objeto Log4j devuelto y no una clase android-logging-log4j. Entonces android-logging-log4j se usa solo para configurar Log4j.- Todavía tengo que probar LogBack . LogBack es desarrollado por la misma persona que creó las bibliotecas Log4J 1.x y SL4J. Sin embargo, no está relacionado con Log4j 2.x.
Pasos para usar Log4j en Android.
Agregue log4j-1.2.x.jar y android-logging-log4j-1.0.3.jar a la carpeta libs.
Agregue permisos solo si usa almacenamiento externo
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
Escribir
Log4j
clase de ayudapackage com.example.logger; import android.os.Environment; import de.mindpipe.android.logging.log4j.LogConfigurator; public class Log4jHelper { private final static LogConfigurator mLogConfigrator = new LogConfigurator(); static { configureLog4j(); } private static void configureLog4j() { String fileName = Environment.getExternalStorageDirectory() + "/" + "log4j.log"; String filePattern = "%d - [%c] - %p : %m%n"; int maxBackupSize = 10; long maxFileSize = 1024 * 1024; configure( fileName, filePattern, maxBackupSize, maxFileSize ); } private static void configure( String fileName, String filePattern, int maxBackupSize, long maxFileSize ) { mLogConfigrator.setFileName( fileName ); mLogConfigrator.setMaxFileSize( maxFileSize ); mLogConfigrator.setFilePattern(filePattern); mLogConfigrator.setMaxBackupSize(maxBackupSize); mLogConfigrator.setUseLogCatAppender(true); mLogConfigrator.configure(); } public static org.apache.log4j.Logger getLogger( String name ) { org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger( name ); return logger; } }
En clase de actividad
org.apache.log4j.Logger log= Log4jHelper.getLogger( "YourActivity" ); log.error("Error"); log.info("Info"); log.warn("Warn");
Fuente de ejemplo . Tenga en cuenta que log4j 2.x (funcionalidades mejoradas) reescrito desde cero no es compatible con log4j 1.x. Entonces tienes que usar el jar log4j 1.2.x con el jar android-logging-log4j. Pude iniciar sesión en el archivo interno de la aplicación y luego enviar el archivo por correo electrónico consetReadable(true, false)