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

}
来自:http://blog.csdn.net/wangyuexing_blog/article/details/39005239

arrow
arrow
    全站熱搜

    戮克 發表在 痞客邦 留言(0) 人氣()