10

このトピックはよく話題に上っていることは知っていますが、この意味ではありません。ログを .txt ファイルに保存する必要がありますが、log4j または他のクラスは使用できませんが、android.util.log はこのソリューションを持っていますが、最適ではありません。Log.i(TAG, "An INFO Message"); と同じ情報を持っています。書かなきゃ…

ERROR = logLevel < 3;
WARNING = logLevel < 2;
INFO = logLevel < 1;
if (INFO){ 

    appendLog("LEVEL: I    TIME: "+java.util.GregorianCalendar.DAY_OF_MONTH +
                        "-"+ java.util.GregorianCalendar.MONTH +" "+GregorianCalendar.HOUR_OF_DAY +":"+GregorianCalendar.MINUTE +
                        ":"+GregorianCalendar.SECOND +"."+GregorianCalendar.MILLISECOND + "    PID: "+
                        android.os.Process.myPid()+ "    TID: "+android.os.Process.myTid()+ "    Application: com.example.myapplication"+
                        "    TAG:" +TAG+ "    TEXT: An INFO Message");
}

その後...

public void appendLog(String text) {        
    File logFile = new File("sdcard/log.txt"); 
    if (!logFile.exists()) { 
        try { 
            logFile.createNewFile(); 
        }catch (IOException e){ 
            e.printStackTrace(); 
      } 
   } 
   try { 
       BufferedWriter buf = new BufferedWriter(new FileWriter(logFile, true));  
       buf.append(text); 
       buf.newLine(); 
       buf.close(); 
   } catch (IOException e) { 
       e.printStackTrace(); 
   } 
}

これよりもエレガントなソリューションを持っている人はいますか? 助けてくれてありがとう。

4

2 に答える 2

14

ここに単純な Logger クラス定義を添付したので、そのまま使用できます。ログ情報を SDCARD の Log.txt ファイルに保存するには、at it is を使用します。

package com.clientname.projectname;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.logging.FileHandler;

import android.os.Environment;
import android.util.Log;

/**
 * @author Rakesh.Jha
 * Date - 07/10/2013
 * Definition - Logger file use to keep Log info to external SD with the simple method
*/

public class Logger {

    public static  FileHandler logger = null;
    private static String filename = "ProjectName_Log";

    static boolean isExternalStorageAvailable = false;
    static boolean isExternalStorageWriteable = false; 
    static String state = Environment.getExternalStorageState();

    public static void addRecordToLog(String message) {

        if (Environment.MEDIA_MOUNTED.equals(state)) { 
            // We can read and write the media 
            isExternalStorageAvailable = isExternalStorageWriteable = true; 
        } else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) { 
            // We can only read the media 
            isExternalStorageAvailable = true; 
            isExternalStorageWriteable = false; 
        } else { 
            // Something else is wrong. It may be one of many other states, but all we need 
            //  to know is we can neither read nor write 
            isExternalStorageAvailable = isExternalStorageWriteable = false; 
        }

        File dir = new File("/sdcard/Files/Project_Name");      
        if (Environment.MEDIA_MOUNTED.equals(state)) {  
            if(!dir.exists()) {
                Log.d("Dir created ", "Dir created ");
                dir.mkdirs();
            }

            File logFile = new File("/sdcard/Files/Project_Name/"+filename+".txt");

            if (!logFile.exists())  {
                try  {
                    Log.d("File created ", "File created ");
                    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.write(message + "\r\n");
                //buf.append(message);
                buf.newLine();
                buf.flush();
                buf.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}

このファイルを作成したら、ログ情報を log.txt ファイルに保存したい場所で、以下のコードを使用します。-

package com.clientname.projectname;

import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.util.Log;

/**

 * @author Rakesh.Jha
 * Date - 03/10/2013
 * Definition -  //ToDO

*/

public class MainActivity extends Activity {

    private static final String TAG = null;
    Logger logger;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d("Testing     :","log"); // no need to do this line, use below line
        logger.addRecordToLog("Testing     : log " );

        logger.addRecordToLog("TAG MediaPlayer audio session ID: " );

        MediaPlayer mediaPlayer = MediaPlayer.create(MainActivity.this, R.raw.test);//test is audio file, u have to keep in raw folder

        logger.addRecordToLog( "MediaPlayer audio session ID: " + mediaPlayer.getAudioSessionId()); 
        logger.addRecordToLog( "Media Player started " + "Started !");

        mediaPlayer.start(); // no need to call prepare(); create() does that for you
    }

    private void prepareMediaServer() { }
}
于 2013-10-18T08:13:18.393 に答える
3

Android のクラスをラップするラッパー クラスを作成しますLogLogこのラッパー クラスは、さらにテキストをファイルに記録することで、クラスの機能を拡張します。

例:

public class MyLog{
    public static void i(String TAG, String message){

        // Printing the message to LogCat console
        Log.i(TAG, message);

        // Write the log message to the file
        appendLog(message);
    }

    public static void d(String TAG, String message){
        Log.d(TAG, message);
        appendLog(message);
    }

    // rest of log methods...
}

次に、次のように使用する必要があります。

MyLog.i("LEVEL 1", "Your log message here...");
于 2012-09-27T14:26:20.843 に答える