美文网首页
打印日志的工具类LogUtils

打印日志的工具类LogUtils

作者: StoneWay3 | 来源:发表于2018-11-14 11:57 被阅读0次

默认的打印日志有长度限制,写一个简单的工具类,解决日志太长打印不全的小问题:

public class LogUtils {

    private static final int MAX_LOG_LENGTH =3500 ;

    private static boolean isDeBug = BuildConfig.DEBUG;

    public final static StringTAG ="yourTag";

    public static void showLog(String tag, String msg) {

        if (isDeBug) {

            if (msg !=null){

                if (msg.length() >MAX_LOG_LENGTH) {

                    for (int i =0; i < msg.length(); i +=MAX_LOG_LENGTH) {

                        //当前截取的长度<总长度则继续截取最大的长度来打印

                            if (i +MAX_LOG_LENGTH < msg.length()) {

                                    Log.i(tag + i, msg.substring(i, i +MAX_LOG_LENGTH));

                            }else {

                                    //当前截取的长度已经超过了总长度,则打印出剩下的全部信息

                                Log.i(tag + i, msg.substring(i, msg.length()));

                            }

                    }

            }else {

                      //直接打印

                    Log.i(tag, msg);

              }

            }

        }

    }

    public static void showLog(String msg) {

            if (isDeBug) {

                if (msg !=null){

                    if (msg.length() >MAX_LOG_LENGTH) {

                        for (int i =0; i < msg.length(); i +=MAX_LOG_LENGTH) {

//当前截取的长度<总长度则继续截取最大的长度来打印

                           if (i +MAX_LOG_LENGTH < msg.length()) {

                            Log.i(TAG + i, msg.substring(i, i +MAX_LOG_LENGTH));

                        }else {

//当前截取的长度已经超过了总长度,则打印出剩下的全部信息

                            Log.i(TAG + i, msg.substring(i, msg.length()));

                    }

                }

            }else {

//直接打印

                    Log.i(TAG, msg);

                }

            }

        }

    }

}
                                                                                                                                                                                                                                                                                                                                                                

或者用这个:

public class LogUtils {

private static BooleanLOG_SWITCH =true; // 日志文件总开关

    private static BooleanLOG_TO_FILE =false; // 日志写入文件开关

    private static StringLOG_TAG ="###stone"; // 默认的tag

    private static char LOG_TYPE ='v';// 输入日志类型,v代表输出所有信息,w则只输出警告...

    private static int LOG_SAVE_DAYS =30;// sd卡中日志文件的最多保存天数

    private final static SimpleDateFormatLOG_FORMAT =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 日志的输出格式

    private final static SimpleDateFormatFILE_SUFFIX =new SimpleDateFormat("yyyy-MM-dd");// 日志文件格式

    private static StringLOG_FILE_PATH; // 日志文件保存路径

    private static StringLOG_FILE_NAME;// 日志文件保存名称

    public static void init(Context context) {// 在Application中初始化

        LOG_FILE_PATH = FileUtils.createRootPath(context);

        LOG_FILE_NAME ="StoneLogFile";

    }

/**************************** Warn *********************************/

    public static void w(Object msg) {

w(LOG_TAG, msg);

    }

public static void w(String tag, Object msg) {

w(tag, msg, null);

    }

public static void w(String tag, Object msg, Throwable tr) {

log(tag, msg.toString(), tr, 'w');

    }

/*************************** Error ********************************/

    public static void e(Object msg) {

e(LOG_TAG, msg);

    }

public static void e(String tag, Object msg) {

e(tag, msg, null);

    }

public static void e(String tag, Object msg, Throwable tr) {

log(tag, msg.toString(), tr, 'e');

    }

/*************************** Debug ********************************/

    public static void d(Object msg) {

d(LOG_TAG, msg);

    }

public static void d(String tag, Object msg) {// 调试信息

        d(tag, msg, null);

    }

public static void d(String tag, Object msg, Throwable tr) {

log(tag, msg.toString(), tr, 'd');

    }

/**************************** Info *********************************/

    public static void i(Object msg) {

i(LOG_TAG, msg);

    }

public static void i(String tag, Object msg) {

i(tag, msg, null);

    }

public static void i(String tag, Object msg, Throwable tr) {

log(tag, msg.toString(), tr, 'i');

    }

/************************** Verbose ********************************/

    public static void v(Object msg) {

v(LOG_TAG, msg);

    }

public static void v(String tag, Object msg) {

v(tag, msg, null);

    }

public static void v(String tag, Object msg, Throwable tr) {

log(tag, msg.toString(), tr, 'v');

    }

/**

    * 根据tag, msg和等级,输出日志

    *

    * @param tag

    * @param msg

    * @param level

    */

    private static void log(String tag, String msg, Throwable tr, char level) {

if(msg.length() >3500){

String show = msg.substring(0, 3500);

            if (LOG_SWITCH) {

if ('e' == level && ('e' ==LOG_TYPE ||'v' ==LOG_TYPE)) {// 输出错误信息

                    Log.e(tag, show, tr);

                }else if ('w' == level && ('w' ==LOG_TYPE ||'v' ==LOG_TYPE)) {

Log.w(tag, show, tr);

                }else if ('d' == level && ('d' ==LOG_TYPE ||'v' ==LOG_TYPE)) {

Log.d(tag, show, tr);

                }else if ('i' == level && ('d' ==LOG_TYPE ||'v' ==LOG_TYPE)) {

Log.i(tag, show, tr);

                }else {

Log.v(tag, show, tr);

                }

if (LOG_TO_FILE)

log2File(String.valueOf(level), tag, show + tr ==null ?"" :"\n" + Log.getStackTraceString(tr));

            }

if((msg.length() -3500)>3500){//剩下的文本还是大于规定长度

                String partLog = msg.substring(3500,msg.length());

                log(tag,partLog, tr, level);

            }else{

String surplusLog = msg.substring(3500, msg.length());

                log(tag,surplusLog, tr, level);

            }

}else{

if (LOG_SWITCH) {

if ('e' == level && ('e' ==LOG_TYPE ||'v' ==LOG_TYPE)) {// 输出错误信息

                    Log.e(tag, msg, tr);

                }else if ('w' == level && ('w' ==LOG_TYPE ||'v' ==LOG_TYPE)) {

Log.w(tag, msg, tr);

                }else if ('d' == level && ('d' ==LOG_TYPE ||'v' ==LOG_TYPE)) {

Log.d(tag, msg, tr);

                }else if ('i' == level && ('d' ==LOG_TYPE ||'v' ==LOG_TYPE)) {

Log.i(tag, msg, tr);

                }else {

Log.v(tag, msg, tr);

                }

if (LOG_TO_FILE)

log2File(String.valueOf(level), tag, msg + tr ==null ?"" :"\n" + Log.getStackTraceString(tr));

            }

}

}

/**

    * 打开日志文件并写入日志

    *

    * @return

    **/

    private synchronized static void log2File(String mylogtype, String tag, String text) {

Date nowtime =new Date();

        String date =FILE_SUFFIX.format(nowtime);

        String dateLogContent =LOG_FORMAT.format(nowtime) +":" + mylogtype +":" + tag +":" + text; // 日志输出格式

        File destDir =new File(LOG_FILE_PATH);

        if (!destDir.exists()) {

destDir.mkdirs();

        }

File file =new File(LOG_FILE_PATH, LOG_FILE_NAME + date);

        try {

FileWriter filerWriter =new FileWriter(file, true);

            BufferedWriter bufWriter =new BufferedWriter(filerWriter);

            bufWriter.write(dateLogContent);

            bufWriter.newLine();

            bufWriter.close();

            filerWriter.close();

        }catch (IOException e) {

e.printStackTrace();

        }

}

/**

    * 删除指定的日志文件

    */

    public static void delFile() {// 删除日志文件

        String needDelFiel =FILE_SUFFIX.format(getDateBefore());

        File file =new File(LOG_FILE_PATH, needDelFiel +LOG_FILE_NAME);

        if (file.exists()) {

file.delete();

        }

}

/**

    * 得到LOG_SAVE_DAYS天前的日期

    *

    * @return

    */

    private static DategetDateBefore() {

Date nowtime =new Date();

        Calendar now = Calendar.getInstance();

        now.setTime(nowtime);

        now.set(Calendar.DATE, now.get(Calendar.DATE) -LOG_SAVE_DAYS);

        return now.getTime();

    }

}

相关文章

网友评论

      本文标题:打印日志的工具类LogUtils

      本文链接:https://www.haomeiwen.com/subject/hfgdfqtx.html