2012-09-27 36 views
8

私はこのトピックがたくさん話されているが、この意味ではないことを知っています。 ログを.txtファイルに保存する必要がありますが、log4jやその他のクラスはandroid.util.logを使用することはできません。 私はこの解決方法を持っていますが、それは最善ではありません。 と同じ情報を持っている:Log.i(TAG、 "情報メッセージ");私が書く必要が ...android.util.logを使ってtxtファイルにログを保存する方法

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

は、誰もがこれよりもよりエレガントな解決策を持っていますか?助けてくれてありがとう。

+0

、それは私が望んで非常に近いですhttp://stackoverflow.com/a/3359857/1321873 – Rajesh

+0

おかげラジェッシュを見てみましょう。 – Alberto

答えて

2

AndroidのLogクラスをラップするラッパークラスを作成します。このラッパークラスは、テキストをファイルに追加記録することにより、Logクラスの機能を拡張します。

例:

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... 
} 

その後、あなたはこのようにそれを使用しwhould:私はシンプルなロガークラス定義を添付して、あなたはそれを使用することができます。ここ

MyLog.i("LEVEL 1", "Your log message here..."); 
+0

しかし、それは私に時間、TID、PID、アプリケーション名を与えません...私にメッセージを与えるだけです。 私は自分自身でこのすべてのパラメータを書く必要がないソリューションを求めています。 もちろん、私はクラスでそれをラップすると、私は一度だけ書く必要がありますが、まだ最高のソリューションを見ていません... 他のソリューション? – Alberto

9

です。 ログ情報をSDCARDのLog.txtファイルに保存するには、が使用されます。

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() { } 
} 
関連する問題