Estoy tratando de escribir registros en el archivo Log.txt personalizado en el archivo de Android usando este código mío, pero luego este método crea un archivo pero no contiene nada. Básicamente, quiero leer el contenido anterior del archivo y luego agregar mis datos con el 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();
}
}
buf.close()
esté dentro de unfinally
bloque.<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
era lo que @ virusss8 quería decir, por supuesto.Para aquellos nuevos en el registro de Java en general y el registro de Android
Algunas opciones para iniciar sesión en txt en Android están a continuación
logcat -f
como en esta respuesta para iniciar sesión en el archivo. Tenga en cuenta que desde 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 buffer logcat es circular y tiene un límite de tamaño. Es posible que no obtenga registros anteriores.Utilice Log4j con android-logging-log4j . ¿Qué hace android-logging-log4j? Hace que Log4j sea más fácil de usar en Android al proporcionar dos funciones.
Ejemplo simple a continuación. Observe que el
logger
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.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 auxiliarEn clase de actividad
Fuente de ejemplo . Tenga en cuenta que log4j 2.x (funcionalidades mejoradas) reescrito desde cero no es compatible con log4j 1.x. Entonces debe usar log4j 1.2.x jar con android-logging-log4j jar. Pude iniciar sesión en el archivo interno de la aplicación y luego enviar el archivo por correo electrónico con
setReadable(true, false)
fuente
microlog4android funciona para mí, pero la documentación es bastante pobre. Todo lo que necesitan agregar es un tutorial de inicio rápido .
Aquí hay un tutorial rápido que encontré.
Agregue la siguiente variable estática en su Actividad principal:
Agregue lo siguiente a su
onCreate()
método:Cree un archivo llamado
microlog.properties
y guárdelo en elassets
directorioEdite el
microlog.properties
archivo de la siguiente manera:Agregue declaraciones de registro como esta:
Para cada clase, crea un objeto registrador como se especifica en 1)
6.Puede agregar el siguiente permiso:
Aquí está la fuente del tutorial
fuente
Advertencia: puedo estar malinterpretándote totalmente, pero si todo lo que quieres es un archivo de registro, ¿por qué sudar?
Ponga esto en un archivo bat (cambie la ruta a su directorio de herramientas, y yourappname es, por supuesto, el nombre de su aplicación):
Luego, en su código, simplemente haga algo similar a esto:
Para crear el registro, conecte el cable USB y ejecute su archivo bat.
Saludos
fuente
Utilice slf4android lib.
Es una implementación simple de slf4j api usando android java.util.logging. *.
caracteristicas:
LoggerConfiguration.configuration().addHandlerToLogger
slf4android es mantenido principalmente por @miensol .
Lea más sobre slf4android en nuestro blog:
fuente
Deberías echar un vistazo a microlog4android. Tienen una solución lista para iniciar sesión en un archivo.
http://code.google.com/p/microlog4android/
fuente
Esto puede ser tarde, pero espero que esto pueda ayudar ... Intenta esto ...
Aquí
bfwritter.newline
escribe su texto en el archivo. Y agrega el permisoen su archivo de manifiesto sin falta.
fuente
Resolví este problema con el siguiente fragmento de código en la línea de comandos:
Donde la opción "hora" agrega detalles de campo de metadatos para la fecha, hora de invocación, prioridad / etiqueta y PID del proceso que emite el mensaje.
Luego, en su código, simplemente haga algo similar a esto (usando android.util.Log):
fuente
adb
está conectado, pero no funciona cuando el dispositivo está en modo independiente. No lo usaría en producción, pero es una solución simple en modo de depuración.En general, debe tener un identificador de archivo antes de abrir la secuencia. Tiene un identificador fileOutputStream antes de createNewFile () en el bloque else. La secuencia no crea el archivo si no existe.
No es realmente específico de Android, pero eso es mucho IO para este propósito. ¿Qué pasa si haces muchas operaciones de "escritura" una tras otra? Leerá todo el contenido y escribirá todo el contenido, tomando tiempo y, lo que es más importante, la duración de la batería.
Sugiero usar java.io.RandomAccessFile, buscar () 'hasta el final, luego escribirChars () para agregar. Será un código mucho más limpio y probablemente mucho más rápido.
fuente
He creado una clase simple y liviana (alrededor de 260 LoC) que extiende la implementación estándar de android.util.Log con registro basado en archivos:
cada mensaje de registro se registra a través de android.util.Log y también se escribe en un archivo de texto en el dispositivo.
Puede encontrarlo en github:
https://github.com/volkerv/FileLog
fuente
Después de mucho tiempo de investigación descubrí que:
android.util.Log
por defecto usojava.util.logging.Logger
logger
con nombre""
, para obtener una instancia de usoLogManager.getLogManager().getLogger("")
logger
instancia de LogCatcom.android.internal.logging.AndroidHandler
después de la ejecución de aplicaciones de depuracióncom.android.internal.logging.AndroidHandler
imprime mensajes en logcat solo con niveles másjava.util.logging.Level.INFO
, como (Level.INFO, Level.WARNING, Level.SEVERE, Level.OFF
)Entonces, para escribir registros en un archivo simplemente
rootLogger
""
agregue unjava.util.logging.FileHandler
:Para imprimir todos los registradores en su aplicación, use:
fuente
Esta variante es mucho más corta.
fuente
Puedes usar la biblioteca que he escrito. Es muy fácil de usar:
Agregue esta dependencia a su archivo gradle:
Inicialice la biblioteca en la clase Aplicación:
Así es como usas la biblioteca:
Y así es como recuperar los registros:
Aquí está el enlace a la página de github con más información: https://github.com/danylovolokh/AndroidLogger
Espero eso ayude.
fuente
Muchas de las versiones anteriores en log4j no funcionan ahora (05/2019). Pero puede usar Hyperlog: puedo confirmar que funciona.
Agregue esta línea a sus dependencias y proyecto de sincronización
Cree una nueva clase de aplicación (cree una nueva clase java y extienda la aplicación). Luego, en el método onCreate, agregue estas líneas:
Cambie el archivo de manifiesto para que se defina el archivo de la aplicación.
Diferentes formas de iniciar sesión:
Encuentra tus archivos de registro. Navegar a
fuente