2011-12-09 93 views
5

默認情況下,android中的Log類將日誌寫入控制檯(logcat)。有沒有簡單的方法來寫日誌f.e.在一些文件?Android將日誌寫入文件

+0

如果你把剛剛打開一個文件句柄和寫有一個天真的做法 - 你會寫你的Android設備上的文件系統,而你需要的是可能開發機器上的文件系統? – justadreamer

+0

是否要將logcat消息導出到文件或只是在文件中寫入日誌消息? – SERPRO

+0

我想將logcat消息導出到文件中。 –

回答

0

重定向的所有錯誤信息到文件中使用的FileInputStream

+4

他會如何做到這一點?你能提供一些鏈接或示例代碼嗎? – Gray

1

如果這僅僅是用於開發目的,您可以在設備上調用logcat的,其輸出重定向到一個文件。例如:adb shell logcat > log.txt

或者,你可以嘗試重定向stdoutstderr到一個文件,iirc這將工作,但我沒有我的手機與我來測試它。

但是,將自己的基本日誌類與內置的日誌類做同樣的事情並保存到文件中會更容易。

0

在Eclipse ddms中有一個選項可以將日誌保存到文件中。

3

簡單Log類(僅限開發/測試用途)類似於android.util.Log,但記錄到SD卡。只有修改現有的代碼才能將import android.util.Log更改爲import com.example.Log。此外,添加許可爲

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

package com.example.logger; 

import java.io.File; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.text.SimpleDateFormat; 
import java.util.Date; 

import android.os.Environment; 

public class Log { 
    private static final String NEW_LINE = System.getProperty("line.separator") ; 
    public static boolean mLogcatAppender = true; 
    final static File mLogFile; 

    static { 
     mLogFile = new File(Environment.getExternalStorageDirectory(), "logs.log"); 
     if (!mLogFile.exists()) { 
      try { 
       mLogFile.createNewFile(); 
      } 
      catch (final IOException e) { 
       e.printStackTrace(); 
      } 
     } 
     logDeviceInfo(); 
    } 

    public static void i(String TAG, String message){ 
     appendLog(TAG + " : " + message); 
     if (mLogcatAppender) { 
      android.util.Log.i(TAG, message); 
     } 
    } 

    public static void d(String TAG, String message){ 
     appendLog(TAG + " : " + message); 
     if (mLogcatAppender) { 
      android.util.Log.d(TAG, message); 
     } 
    } 

    public static void e(String TAG, String message){ 
     appendLog(TAG + " : " + message); 
     if (mLogcatAppender) { 
      android.util.Log.e(TAG, message); 
     } 
    } 

    public static void v(String TAG, String message){ 
     appendLog(TAG + " : " + message); 
     if (mLogcatAppender) { 
      android.util.Log.v(TAG, message); 
     } 
    } 

    public static void w(String TAG, String message) { 
     appendLog(TAG + " : " + message); 
     if (mLogcatAppender) { 
      android.util.Log.w(TAG, message); 
     } 
    } 

    private static synchronized void appendLog(String text) { 
     final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); 

     try { 
      final FileWriter fileOut = new FileWriter(mLogFile, true); 
      fileOut.append(sdf.format(new Date()) + " : " + text + NEW_LINE); 
      fileOut.close(); 
     } 
     catch (final IOException e) { 
      e.printStackTrace(); 
     } 
    } 

    private static void logDeviceInfo() { 
     appendLog("Model : " + android.os.Build.MODEL); 
     appendLog("Brand : " + android.os.Build.BRAND); 
     appendLog("Product : " + android.os.Build.PRODUCT); 
     appendLog("Device : " + android.os.Build.DEVICE); 
     appendLog("Codename : " + android.os.Build.VERSION.CODENAME); 
     appendLog("Release : " + android.os.Build.VERSION.RELEASE); 
    } 

} 
+0

有幫助的哥們..! –