程序中输出的各种日志信息类并写入日志文件
相信在开发应用的过程中,日志的输出是相当重要的,当你测试bug时,日志能帮你快速定位问题,
因此一个日志类的好坏关系到了你应用的开发速度,正确率等,是相当重要的,在些分享一个日志类,
实现了各种日志信息的记录,并会写入到SD卡的文件当中,在有bug时可以叫测试人员将此文件发回
来定位问题。
代码:
package com.util; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.RandomAccessFile; import java.io.UnsupportedEncodingException; import java.text.SimpleDateFormat; import java.util.Date; import org.apache.http.Header; import android.app.Activity; import android.content.Intent; import android.os.Environment; /** * 日志打印类,提供了一个开关来决定是否打印日志 */ public class AspLog { public final static String STARTUP_TAG = "startup_log"; private static String path = "/sdcard/mm/mmdebugversion_com.mm.txt"; private static boolean isFirst = true; public static void setIsPrintLog() { try { if (new File(path).exists()) isPrintLog = true; isFirst = false; } catch (Exception ex) { } } public static void setIsPrintLog(Activity acti) { try { Intent intent = acti.getIntent(); // 文件是否存在 File file = new File(path); if(file.exists()) { isPrintLog = true; } // intent内是否有数据 if(isPrintLog == false) { isPrintLog = intent.getBooleanExtra("com.mm.debug", false); if(isPrintLog == true) { file.createNewFile(); } } isFirst = false; } catch (Exception ex) { } } private static void checkLog() { if(isFirst == true) { File file = new File(path); if(file.exists()) { isPrintLog = true; } isFirst = false; } createLogFile(); } public static boolean isPrintLog = true; public static boolean isPrintSDcardLog = true; public static boolean isWriteToFile = false; private static final boolean isShowLoginSuc = false; private final static String LOG_FILEPATH = "mm" + File.separator + "log" + File.separator; // private final static String LOG_CFGFILE = "mmlog.cfg"; private final static String LOG_FILENAME = "mmlog"; private final static String LOG_FILEEXT = ".txt"; private static File mLogFile; private final static long LOGFILE_LIMIT = 1000000L; private final static SimpleDateFormat DATEFORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); private final static SimpleDateFormat DATEFORMAT1 = new SimpleDateFormat("yyyyMMddHHmmss"); private static String mSdcardRootPath = "/sdcard/"; private static final String SHOW_CFGFILE = "mmloginsuccess.cfg"; public static void print(String msg) { checkLog(); if(isPrintLog) { System.out.print(msg == null ? "" : msg); } writeLogFile("", "", msg); } private static void createLogFile() { if(isWriteToFile) { synchronized (LOG_FILENAME) { if(mLogFile == null) { try { if (!Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)){ return; } // File sdcardRootPath = Environment.getExternalStorageDirectory(); mSdcardRootPath = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator; // File cfgfile = new File(mSdcardRootPath + LOG_CFGFILE); // if(!cfgfile.exists()){//没用开启配置文件则不写日志文件 // return; // } File logpath = new File(mSdcardRootPath + LOG_FILEPATH); if(!logpath.exists()){ logpath.mkdir(); } mLogFile = new File(mSdcardRootPath + LOG_FILEPATH + LOG_FILENAME + LOG_FILEEXT); if(!mLogFile.exists()) { AspLog.d("TestFile", "Create the file:" + LOG_FILENAME); mLogFile.createNewFile(); } } catch (Exception e) { e.printStackTrace(); } } else { if(mLogFile.isFile()) { if(mLogFile.length() > LOGFILE_LIMIT) { StringBuffer sb = new StringBuffer(mSdcardRootPath); sb.append(LOG_FILEPATH); sb.append(LOG_FILENAME); sb.append(DATEFORMAT1.format(new Date())); sb.append(LOG_FILEEXT); mLogFile.renameTo(new File(sb.toString())); sb = null; sb = new StringBuffer(mSdcardRootPath); sb.append(LOG_FILEPATH); sb.append(LOG_FILENAME); sb.append(LOG_FILEEXT); mLogFile = new File(sb.toString()); sb = null; if(!mLogFile.exists()) { AspLog.d("TestFile", "Create the file:" + LOG_FILENAME + LOG_FILEEXT); try { mLogFile.createNewFile(); } catch (IOException e) { e.printStackTrace(); } } } } } } } } private static void writeLogFile(String level, String tag, String msg) { if(isWriteToFile) { synchronized (LOG_FILENAME) { if(mLogFile != null) { StringBuffer sb = new StringBuffer(); sb.append(DATEFORMAT.format(new Date())); sb.append(": "); sb.append(level); sb.append(": "); sb.append(tag); sb.append(": "); sb.append(msg); sb.append("\n"); RandomAccessFile raf = null; try { raf = new RandomAccessFile(mLogFile, "rw"); raf.seek(mLogFile.length()); raf.write(sb.toString().getBytes("UTF-8")); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { sb = null; if(raf != null) { try { raf.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } } } } public static void println(String msg) { checkLog(); if(isPrintLog) { System.out.println(msg == null ? "" : msg); } writeLogFile("", "", msg); } public static void i(String tag, String msg) { checkLog(); if(isPrintLog) { android.util.Log.i(tag, msg == null ? "" : msg); } writeLogFile("INFO", tag, msg); } public static void i(String tag, String msg, Throwable tr) { checkLog(); if(isPrintLog) { android.util.Log.i(tag, msg == null ? "" : msg, tr); } writeLogFile("INFO", tag, msg); } public static void d(String tag, String msg) { checkLog(); if(isPrintLog) { android.util.Log.d(tag, msg == null ? "" : msg); } writeLogFile("DEBUG", tag, msg); } public static void d(String tag, String msg, Throwable tr) { checkLog(); if(isPrintLog) { android.util.Log.d(tag, msg == null ? "" : msg, tr); } writeLogFile("DEBUG", tag, msg); } public static void e(String tag, String msg) { checkLog(); if(isPrintLog) { android.util.Log.e(tag, msg == null ? "" : msg); } writeLogFile("ERROR", tag, msg); } public static void e(String tag, String msg, Throwable tr) { checkLog(); if(isPrintLog) { android.util.Log.e(tag, msg == null ? "" : msg, tr); } writeLogFile("ERROR", tag, msg); } public static void v(String tag, String msg) { checkLog(); if(isPrintLog) { android.util.Log.v(tag, msg == null ? "" : msg); } writeLogFile("VERBOSE", tag, msg); } public static void v(String tag, String msg, Throwable tr) { checkLog(); if(isPrintLog) { android.util.Log.v(tag, msg == null ? "" : msg, tr); } writeLogFile("VERBOSE", tag, msg); } public static void w(String tag, String msg) { checkLog(); if(isPrintLog) { android.util.Log.w(tag, msg == null ? "" : msg); } writeLogFile("WARN", tag, msg); } public static void w(String tag, String msg, Throwable tr) { checkLog(); if(isPrintLog) { android.util.Log.w(tag, msg == null ? "" : msg, tr); } writeLogFile("WARN", tag, msg); } public static void save2sd(String filename, String data) { File file = new File("/sdcard/mm"); if(!file.isDirectory()) { if(file.exists()) file.delete(); file.mkdir(); } file = new File("/sdcard/mm/" + filename); int index = -1; index = filename.lastIndexOf('/'); if(index > 0) { filename = filename.substring(index + 1); } index = filename.lastIndexOf('.'); String basename, extname; if(index > 0) { basename = filename.substring(0, index); extname = filename.substring(index); } else { basename = filename; extname = ""; } index = 0; while (file.exists()) { file = null; file = new File("/sdcard/mm/" + basename + (index++) + extname); } FileOutputStream fos = null; try { file.createNewFile(); fos = new FileOutputStream(file, true); fos.write(data.getBytes()); } catch (FileNotFoundException e1) { e1.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { if(fos != null) { try { fos.close(); } catch (IOException e) { e.printStackTrace(); } fos = null; } } } public static void h(String tag, String hintmsg, Header[] headers) { checkLog(); if(isPrintLog && headers != null) { // HeaderElement he[] = null; int k = 0; StringBuilder sb = new StringBuilder(); for (Header h : headers) { sb.setLength(0); sb.append(hintmsg + " H" + (k++) + " " + h.getName() + " : " + h.getValue()); // he = h.getElements(); // if (he != null){ // sb.append(" he-> "); // i = 0; // for (HeaderElement e:he){ // if (i > 0) // sb.append(","); // sb.append(e.getName()+"="+e.getValue()); // i ++ ; // } // } AspLog.v(tag, sb.toString()); } } } /** * 是否一直显示登录成功提示toast,只用于调试,测试验证,拨测 * @return */ public static boolean isShowLoginSuccess(){ if(!isShowLoginSuc){ return false; } File cfgfile = new File(mSdcardRootPath + SHOW_CFGFILE); if(!cfgfile.exists()){//没有开启配置文件则不显示 return false; } return true; } }
更多的移动互联网的发展趋势、app开发、移动互联网应用相关的资料请到互联网的一点事:www.yidin.net 留言
android QQ群:222392467
资料:
http://www.yidin.net/?p=8280
http://www.yidin.net/?p=9725