Android開發調試日志工具類[支持保存到SD卡]

jopen 10年前發布 | 40K 次閱讀 Android Android開發 移動開發

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

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!