Android 開發技巧之Log寫入文件

在Android開發的時候經常會遇到手機offline,影響日誌的查看與分析。爲此,我寫了一個簡單的類用於將日誌寫入文件中,便於以後調試的時候可以拿來使用:

package org.test;

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

public class LogWriter {
	
	private static LogWriter mLogWriter;

	private static String mPath;
	
	private static Writer mWriter;
	
	private static SimpleDateFormat df;
	
	private LogWriter(String file_path) {
		this.mPath = file_path;
		this.mWriter = null;
	}
	
	public static LogWriter open(String file_path) throws IOException {
		if (mLogWriter == null) {
			mLogWriter = new LogWriter(file_path);
		}
		File mFile = new File(mPath);
		mWriter = new BufferedWriter(new FileWriter(mPath), 2048);
		df = new SimpleDateFormat("[yy-MM-dd hh:mm:ss]: ");
		
		return mLogWriter;
	}
	
	public void close() throws IOException {
		mWriter.close();
	}
	
	public void print(String log) throws IOException {
		mWriter.write(df.format(new Date()));
		mWriter.write(log);
		mWriter.write("\n");
		mWriter.flush();
	}
	
	public void print(Class cls, String log) throws IOException { //如果還想看是在哪個類裏可以用這個方法
		mWriter.write(df.format(new Date()));
		mWriter.write(cls.getSimpleName() + " ");
		mWriter.write(log);
		mWriter.write("\n");
		mWriter.flush();
	}
	
}
感覺在整個程序中進行寫日誌操作之後用到一個實例,所以我用了單例模式


使用這個類的代碼:

	private LogWriter mLogWriter;
	
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);   
        setContentView(R.layout.main);
        
        File logf = new File(Environment.getExternalStorageDirectory()
        		+ File.separator + "DemoLog.txt");
        
        try {
			mLogWriter = LogWriter.open(logf.getAbsolutePath());
		} catch (IOException e) {
			// TODO Auto-generated catch block
			Log.d(tag, e.getMessage());
		}
        
        log("onCreate()");
    }
    
    public void log(String msg) {
    	Log.d(tag, msg);
    	
    	try {
			mLogWriter.print(AlarmManagerDemo.class, msg);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			Log.d(tag, e.getMessage());
		}
    }



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章