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

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

posted on 2013-05-11 20:32  梁DH  阅读(791)  评论(0编辑  收藏  举报

导航