J'essaie d'écrire des journaux dans un fichier Log.txt personnalisé sur un fichier Android en utilisant ce code de Mine, mais cette méthode crée un fichier mais ne contient rien. Fondamentalement, je veux lire le contenu précédent du fichier, puis ajouter mes données au contenu existant.
Le code est comme suit :
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()
soit à l'intérieur d'unfinally
bloc.<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
était ce que @ virusss8 voulait dire, bien sûr.Pour ceux qui découvrent la journalisation Java en général et la journalisation Android
Certaines options de connexion au txt sous Android sont ci-dessous
logcat -f
comme dans cette réponse pour vous connecter au fichier. Notez qu'à partir d'Android 4.2, l'autorisation READ_LOGS n'a aucun impact et chaque application (sauf si le téléphone est enraciné) ne peut lire que ses propres journaux. L'inconvénient ici est que le tampon logcat est circulaire et a une limite de taille. Vous pourriez ne pas obtenir les journaux précédents.Utilisez Log4j avec android-logging-log4j . Que fait android-logging-log4j? Il rend Log4j plus facile à utiliser sous Android en donnant deux fonctions.
Exemple simple ci-dessous. Notez que l'
logger
objet dans l'exemple ci-dessous est un objet Log4j renvoyé et non une classe android-logging-log4j. Ainsi, android-logging-log4j est utilisé uniquement pour configurer Log4j.Étapes d'utilisation de Log4j sous Android.
Ajoutez à la fois log4j-1.2.x.jar et android-logging-log4j-1.0.3.jar au dossier libs.
Ajouter des autorisations uniquement si vous utilisez un stockage externe
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
Écrire une
Log4j
classe d'assistanceEn classe d'activité
Exemple de source . Notez que log4j 2.x (fonctionnalités améliorées) réécrit à partir de zéro n'est pas compatible avec log4j 1.x. Vous devez donc utiliser le jar log4j 1.2.x avec le jar android-logging-log4j. J'ai pu me connecter au fichier interne de l'application et plus tard envoyer le fichier avec
setReadable(true, false)
la source
microlog4android fonctionne pour moi mais la documentation est assez pauvre. Tout ce qu'ils doivent ajouter est un tutoriel de démarrage rapide .
Voici un petit tutoriel que j'ai trouvé.
Ajoutez la variable statique suivante dans votre activité principale:
Ajoutez ce qui suit à votre
onCreate()
méthode:Créez un fichier nommé
microlog.properties
et stockez-le dans leassets
répertoireModifiez le
microlog.properties
fichier comme suit:Ajoutez des instructions de journalisation comme celle-ci:
Pour chaque classe, vous créez un objet enregistreur comme spécifié en 1)
6.Vous pouvez ajouter l'autorisation suivante:
Voici la source du tutoriel
la source
Attention: je vous comprends peut-être totalement, mais si vous ne voulez qu'un fichier journal, pourquoi transpirer?
Mettez ceci dans un fichier chauve-souris (changez le chemin vers votre répertoire d'outils, et yourappname est bien sûr le nom de votre application):
Ensuite, dans votre code, faites quelque chose de similaire à ceci:
Pour créer le journal, connectez le câble USB et exécutez votre fichier bat.
Cordialement
la source
Utilisez slf4android lib.
C'est une implémentation simple de l' api slf4j en utilisant android java.util.logging. *.
Fonctionnalités:
LoggerConfiguration.configuration().addHandlerToLogger
slf4android est maintenu principalement par @miensol .
En savoir plus sur slf4android sur notre blog:
la source
Vous devriez jeter un oeil à microlog4android. Ils ont une solution prête à se connecter à un fichier.
http://code.google.com/p/microlog4android/
la source
C'est peut-être tard, mais j'espère que cela vous aidera. Essayez ceci ...
ici
bfwritter.newline
écrit votre texte dans le fichier. Et ajoutez la permissiondans votre fichier manifeste sans faute.
la source
J'ai résolu ce problème avec le morceau de code suivant en ligne de commande:
Où l'option "heure" ajoute des détails de champ de métadonnées pour la date, l'heure d'appel, la priorité / étiquette et le PID du processus émettant le message.
Ensuite, dans votre code, faites quelque chose de similaire à ceci (en utilisant android.util.Log):
la source
adb
est connecté, mais ne fonctionne pas lorsque l'appareil est en mode autonome. Je ne l'utiliserais pas en production, mais c'est une solution simple en mode débogage.En général, vous devez disposer d'un descripteur de fichier avant d'ouvrir le flux. Vous avez un handle fileOutputStream avant createNewFile () dans le bloc else. Le flux ne crée pas le fichier s'il n'existe pas.
Pas vraiment spécifique à Android, mais c'est beaucoup d'E / S à cet effet. Et si vous effectuez plusieurs opérations "d'écriture" l'une après l'autre? Vous lirez l'intégralité du contenu et rédigerez l'intégralité du contenu, en prenant du temps et, plus important encore, l'autonomie de la batterie.
Je suggère d'utiliser java.io.RandomAccessFile, seek () 'ing jusqu'à la fin, puis writeChars () pour ajouter. Ce sera un code beaucoup plus propre et probablement beaucoup plus rapide.
la source
J'ai créé une classe simple et légère (environ 260 LoC) qui étend l'implémentation standard android.util.Log avec la journalisation basée sur les fichiers:
chaque message de journal est enregistré via android.util.Log et également écrit dans un fichier texte sur l'appareil.
Vous pouvez le trouver sur github:
https://github.com/volkerv/FileLog
la source
Après une longue enquête, j'ai constaté que:
android.util.Log
par défaut utiliserjava.util.logging.Logger
logger
avec nom""
, pour en obtenir une instance, utilisezLogManager.getLogManager().getLogger("")
logger
instance LogCatcom.android.internal.logging.AndroidHandler
après l'exécution des applications de débogagecom.android.internal.logging.AndroidHandler
imprime les messages dans logcat uniquement avec des niveaux supérieurs àjava.util.logging.Level.INFO
ceux de (Level.INFO, Level.WARNING, Level.SEVERE, Level.OFF
)Donc, pour écrire des journaux dans un fichier, il suffit d'
rootLogger
""
ajouter unjava.util.logging.FileHandler
:Pour imprimer tous les enregistreurs de votre application, utilisez:
la source
Cette variante est beaucoup plus courte
la source
Vous pouvez utiliser la bibliothèque que j'ai écrite. C'est très simple à utiliser:
Ajoutez cette dépendance à votre fichier gradle:
Initialisez la bibliothèque dans la classe Application:
Voici comment vous utilisez la bibliothèque:
Et voici comment récupérer les journaux:
Voici le lien vers la page github avec plus d'informations: https://github.com/danylovolokh/AndroidLogger
J'espère que ça aide.
la source
La plupart des versions précédentes de log4j ne fonctionnent pas maintenant (05/2019). Mais vous pouvez utiliser Hyperlog - je peux confirmer que cela fonctionne.
Ajoutez cette ligne à vos dépendances et à votre projet de synchronisation
Créez une nouvelle classe d'application (créez une nouvelle classe java et étendez l'application). Ensuite, dans la méthode onCreate, ajoutez ces lignes:
Modifiez le fichier manifeste pour définir le fichier d'application.
Différentes façons de se connecter:
Trouvez vos fichiers journaux. Aller vers
la source