136 votes

Android écriture des logs dans un fichier texte

J'essaie d'écrire des logs dans un fichier Log.txt personnalisé sur Android en utilisant ce code, mais cette méthode crée un fichier qui ne contient rien. En fait, je veux lire le contenu précédent du fichier et ajouter mes données au contenu existant.

Le code est le suivant :

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();
            }
        }

259voto

outkkast Points 1251

J'espère que cela pourra vous aider...

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();
   }
}

86 votes

N'oubliez pas d'ajouter l'autorisation pour writing_external_storage dans Manifest !

5 votes

J'avais besoin d'ajouter buf.flush() ; beforebuf.close() ; mais cette fonction correspondait exactement à ce dont j'avais besoin.

1 votes

D'où dois-je appeler cette fonction pour qu'elle écrive tous les logs de l'application dans un fichier ?

25voto

Henry Bennett Points 111

Microlog4android fonctionne pour moi mais la documentation est assez pauvre. Tout ce qu'ils devraient ajouter, c'est une page de démarrage rapide. tutoriel .

Voici un tutoriel rapide que j'ai trouvé.

  1. Ajoutez la variable statique suivante dans votre activité principale :

    private static final Logger logger = LoggerFactory.getLogger();
  2. Ajoutez ce qui suit à votre onCreate() méthode :

    PropertyConfigurator.getConfigurator(this).configure();
  3. Créer un fichier nommé microlog.properties et le stocker dans assets répertoire

  4. Modifier le microlog.properties comme suit :

    microlog.level=DEBUG
    microlog.appender=LogCatAppender;FileAppender
    microlog.formatter=PatternFormatter
    microlog.formatter.PatternFormatter.pattern=%c [%P] %m %T
  5. Ajoutez des déclarations de journalisation comme celles-ci :

    logger.debug("M4A");

Pour chaque classe, vous créez un objet logger comme indiqué au point 1).

6. vous pouvez ajouter la permission suivante :

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Voici le source pour le tutoriel

4 votes

FileAppender va créer un fichier "microlog.txt" sur votre carte SD (le chemin complet dans mon cas est "/sdcard/microlog.txt").

2 votes

Ce tutoriel rapide devrait faire partie de la documentation officielle de Microlog4Android.

0 votes

Erreur:Android Dex : [projet] com.Android.dex.DexException : Plusieurs fichiers dex définissent Lcom/google/code/microlog4android/Level ; ?

10voto

BeMeCollective Points 495

Avertissement : Il se peut que je ne vous comprenne pas du tout, mais si tout ce que vous voulez, c'est un fichier journal, pourquoi transpirer ?

Mettez ceci dans un fichier bat (changez le chemin d'accès à votre répertoire d'outils, et votre nom d'application est bien sûr le nom de votre application) :

cd "C:\devAndroid\Software\android-sdk-windows-1.6_r1\android-sdk-windows-1.6_r1\tools"
adb logcat -v time   ActivityManager:W  yourappname:D  *:W >"C:\devAndroid\log\yourappname.log"

Ensuite, dans votre code, faites quelque chose de similaire à ceci :

Log.d("yourappname", "Your message");

Pour créer le journal, connectez le câble USB et exécutez votre fichier bat.

Salutations

0 votes

N'oubliez pas d'importer Android.util.Log.

0 votes

Il renvoie "error : more than one device and emulator - waiting for device -" et rien d'autre. Quelque chose ne va pas ?

21 votes

Comment cela fonctionne-t-il si vous n'êtes pas à proximité d'un PC lorsque vous utilisez l'application ?

7voto

darius Points 2492

Vous devriez jeter un coup d'œil à microlog4android. Ils ont une solution prête à enregistrer dans un fichier.

http://code.google.com/p/microlog4android/

12 votes

Cela semble être une bonne bibliothèque, mais la documentation est terrible. Je n'ai tout simplement pas réussi à comprendre comment la faire fonctionner et j'ai fini par créer quelque chose moi-même.

0 votes

@PaulLammertsma : Je pense qu'il serait bien que vous contribuiez plutôt à Microlog4Android. Pour info : il a la même API que Log4j. Désolé pour la mauvaise documentation.

0 votes

@Paul Lammertsma Comment une chose peut-elle être bonne si sa documentation est si mauvaise que vous ne pouvez pas l'utiliser ? Si vous ne pouvez pas le faire fonctionner, c'est de la merde.

7voto

AndroidOptimist Points 352

C'est peut-être un peu tard, mais j'espère que cela pourra vous aider... Essayez ceci : ....

public void writefile()
    {
        File externalStorageDir = Environment.getExternalStorageDirectory();
        File myFile = new File(externalStorageDir , "yourfilename.txt");

        if(myFile.exists())
        {
           try
           {

        FileOutputStream fostream = new FileOutputStream(myFile);
        OutputStreamWriter oswriter = new OutputStreamWriter(fostream); 
        BufferedWriter bwriter = new BufferedWriter(oswriter);   
        bwriter.write("Hi welcome ");
        bwriter.newLine();            
        bwriter.close(); 
        oswriter.close(); 
        fostream.close();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }
        else
        {
            try {
                myFile.createNewFile();
            }
            catch (IOException e) 
            {
                e.printStackTrace();
            }
        }

aquí bfwritter.newline écrit votre texte dans le fichier. Et ajoutez la permission

 <uses-permission android:name = "android.permission.WRITE_EXTERNAL_STORAGE"/>

dans votre fichier manifeste.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X