程序中输出的各种日志信息类并写入日志文件

相信在开发应用的过程中,日志的输出是相当重要的,当你测试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

你可能感兴趣的:(程序中输出的各种日志信息类并写入日志文件)