带定位功能的输出日志

public class ELog {
    /**
     * 是否是debug模式----总开关
     */
    private static boolean isDebug = true;

    /**
     * 打印错误信息
     *
     * @param msg
     */
    public static void e(Object msg) {
        if (!isDebug) {
            return;
        }
        printMsg(getStackTrace(), "", msg.toString());
    }

    /**
     * 打印错误信息
     *
     * @param msg
     */
    public static void e(String tag, Object msg) {
        if (!isDebug) {
            return;
        }
        printMsg(getStackTrace(), tag, msg.toString());
    }

    /**
     * 打印错误信息
     *
     * @param msg
     */
    public static void file(String fileName, String msg) {
        if (!isDebug) {
            return;
        }
        printMsgToFile(getStackTrace(), fileName, msg);
    }

    /**
     * 获取StackTraceElement对象-----当前调用ELog.e()处的类信息(类名、方法名、行等)
     *
     * @return
     */
    private static StackTraceElement getStackTrace() {
        return Thread.currentThread().getStackTrace()[4];
    }

    /**
     * 设置是否打印e方法的日志
     *
     * @param isDebug
     */
    public static void setIsDebug(boolean isDebug) {
        ELog.isDebug = isDebug;
    }

    /**
     * 打印日志
     *
     * @param element 当前调用ELog.e()处的类信息(类名、方法名、行等)
     * @param msg
     */
    private static void printMsg(StackTraceElement element, String tag, String msg) {
        msg = msg.replace("(", "(").replace(")", ")");//替换()为中文,防止冲突
        StringBuilder sb = new StringBuilder();
//        String className = traceElement.getClassName();//暂时不需要类名
        String fileName = element.getFileName();
        sb.append(element.getMethodName())
                .append("(").append(fileName).append(":")
                .append(element.getLineNumber())
                .append(")");
        String lTag = (TextUtils.isEmpty(tag) ? "" : (tag + ":")) + sb.toString();
        Log.e(lTag, msg);
    }

    /**
     * 打印日志到文件
     *
     * @param element  当前调用ELog.e()处的类信息(类名、方法名、行等)
     * @param fileName
     * @param msg
     */
    private static void printMsgToFile(StackTraceElement element, String fileName, String msg) {
        StringBuilder sb = new StringBuilder();
        String className = element.getFileName();
        sb.append(element.getMethodName())
                .append(" (").append(className).append(":")
                .append(element.getLineNumber())
                .append(") ");
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss:SSS");
        String content = "-----------------------   " +
                format.format(new Date(System.currentTimeMillis()))
                + "   -----------------------\n" + sb.toString() + "\n" +
                msg + "\n\n\n";
        File dir = new File(Environment.getExternalStorageDirectory().getPath() + "/ELog/");
        if (!dir.exists()) {
            dir.mkdirs();
        }
        FileOutputStream fos = null;
        try {
            fos = new FileOutputStream(dir.getPath() + "/" + fileName + ".txt", true);
            fos.write(content.getBytes());
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (fos != null) {
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值