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


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

  • 相关阅读:
    atom介绍
    举例介绍重构(译)
    java单双派机制理解
    AngularJS开发指南03:HTML编译器
    AngularJS开发指南02:引导程序
    AngularJS开发指南01:AngularJS简介
    1.angular之Hello World
    31天重构学习笔记(java版本)
    一个农夫的故事 分类: 其他 2015-01-24 16:44 104人阅读 评论(0) 收藏
    一个农夫的故事 分类: 其他 2015-01-24 16:44 103人阅读 评论(0) 收藏
  • 原文地址:https://www.cnblogs.com/ondream/p/3073268.html
Copyright © 2020-2023  润新知