Android開發調試日志工具類[支持保存到SD卡]
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.net.UnknownHostException;
import java.text.SimpleDateFormat;
import java.util.Date;import android.annotation.SuppressLint;
import android.os.Environment;
import android.util.Log;/**
- Android開發調試日志工具類[支持保存到SD卡]<br>
- <br>
- 需要一些權限: <br>
- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <br>
- <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /><br>
- @author PMTOAM
*/
@SuppressLint("SimpleDateFormat")
public class MyLog
{public static final String CACHE_DIR_NAME = "dPhoneLog";
public static boolean isDebugModel = true;// 是否輸出日志
public static boolean isSaveDebugInfo = true;// 是否保存調試日志
public static boolean isSaveCrashInfo = true;// 是否保存報錯日志public static void v(final String tag, final String msg)
{if (isDebugModel) { Log.v(tag, "--> " + msg); }
}
public static void d(final String tag, final String msg)
{if (isDebugModel) { Log.d(tag, "--> " + msg); }
}
public static void i(final String tag, final String msg)
{if (isDebugModel) { Log.i(tag, "--> " + msg); }
}
public static void w(final String tag, final String msg)
{if (isDebugModel) { Log.w(tag, "--> " + msg); }
}
/**
- 調試日志,便于開發跟蹤。
- @param tag
@param msg */
public static void e(final String tag, final String msg)
{
if (isDebugModel)
{Log.e(tag, "--> " + msg);
}
if (isSaveDebugInfo)
{new Thread() { public void run() { write(time() + tag + " --> " + msg + "\n"); }; }.start();
}
}
/**
- try catch 時使用,上線產品可上傳反饋。
- @param tag
- @param tr
*/
public static void e(final String tag, final Throwable tr)
{
if (isSaveCrashInfo)
{
}new Thread() { public void run() { write(time() + tag + " [CRASH] --> " + getStackTraceString(tr) + "\n"); }; }.start();
}
/**
- 獲取捕捉到的異常的字符串
- @param tr
@return */
public static String getStackTraceString(Throwable tr)
{
if (tr == null)
{return "";
}
Throwable t = tr;
while (t != null)
{if (t instanceof UnknownHostException) { return ""; } t = t.getCause();
}
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
tr.printStackTrace(pw);
return sw.toString();
}
/**
- 標識每條日志產生的時間
- @return
*/
private static String time()
{
return "["
}+ new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date( System.currentTimeMillis())) + "] ";
/**
- 以年月日作為日志文件名稱
- @return
*/
private static String date()
{
return new SimpleDateFormat("yyyy-MM-dd").format(new Date(System
}.currentTimeMillis()));
/**
- 保存到日志文件
- @param content
*/
public static synchronized void write(String content)
{
try
{
}FileWriter writer = new FileWriter(getFile(), true); writer.write(content); writer.close();
catch (IOException e)
{
}e.printStackTrace();
}
/**
- 獲取日志文件路徑
@return */
public static String getFile()
{
File sdDir = null;if (Environment.getExternalStorageState().equals(
android.os.Environment.MEDIA_MOUNTED)) sdDir = Environment.getExternalStorageDirectory();
File cacheDir = new File(sdDir + File.separator + CACHE_DIR_NAME);
if (!cacheDir.exists())cacheDir.mkdir();
File filePath = new File(cacheDir + File.separator + date() + ".txt");
return filePath.toString();
}
} </pre>來自:http://blog.csdn.net/wangyuexing_blog/article/details/39005239