如何使用android.util.log将日志存储在txt文件中

我知道这个话题已经被讨论了很多,但不是在这个意义上。 我需要将日志存储在一个.txt文件,但我不能使用log4j或任何其他类,但android.util.log我有这个解决scheme,但它不是最好的。 对于具有相同的信息比:Log.i(TAG,“一条信息消息”); 我必须写…

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

有没有人有比这更优雅的解决scheme? 感谢你们对我的帮助。

Solutions Collecting From Web of "如何使用android.util.log将日志存储在txt文件中"

这里跟我附上简单的Logger类的定义,你可以使用它。 要将日志信息存储到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(); } } } } 

现在,一旦你创build了这个文件,你想在哪里存储一个日志信息到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() { } } 

创build一个封装类来包装Android的Log类。 这个包装类将通过另外将文本logging到文件中来扩展Log类的function。

例:

 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...");