2012-09-27 44 views
8

Tôi biết chủ đề này đã được nói nhiều nhưng không phải trong ý nghĩa này. Tôi cần lưu trữ nhật ký trong tệp .txt nhưng tôi không thể sử dụng log4j hoặc bất kỳ lớp nào khác nhưng android.util.log Tôi có giải pháp này nhưng không phải là giải pháp tốt nhất. Để có thông tin giống với: Log.i (TAG, "Thông báo INFO"); tôi phải viết ...Cách lưu trữ Nhật ký trong tệp txt bằng android.util.log

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

và sau đó ...

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

Có ai có một giải pháp thanh lịch hơn điều này? Cảm ơn vì đã giúp tôi.

+0

Hãy xem http://stackoverflow.com/a/3359857/1321873 – Rajesh

+0

Cảm ơn Rajesh nó rất chặt chẽ những gì tôi muốn. – Alberto

Trả lời

2

Tạo lớp bao bọc sẽ bọc lớp Log của Android. Lớp trình bao bọc này sẽ mở rộng chức năng của lớp Log bằng cách ghi thêm văn bản vào một tệp.

Ví dụ:

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

Sau đó, bạn whould sử dụng nó như thế này:

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

Nhưng nó không cho tôi thời gian, TID, PID, tên ứng dụng ... chỉ cho tôi thông điệp. Tôi yêu cầu một giải pháp mà tôi không phải tự viết tất cả các thông số này. Tất nhiên nếu tôi quấn nó trong một lớp tôi sẽ chỉ phải viết nó một lần nhưng vẫn không tìm giải pháp tốt nhất ... Bất kỳ giải pháp nào khác? – Alberto

9

đây với tôi gắn liền đơn giản định nghĩa lớp Logger, bạn có thể sử dụng tại nó được. Để lưu trữ thông tin nhật ký vào tệp Log.txt trong SDCARD, hãy sử dụng tại đây.

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

Bây giờ khi bạn tạo ra tập tin này, có bao giờ bạn muốn lưu trữ một thông tin đăng nhập vào sử dụng tập tin log.txt dưới mã. -

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() { } 
} 
Các vấn đề liên quan