日志工具类(二)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/BlogRecord/article/details/53958689

概述:


重写Logger日志工具类,便于选择需要打印排版后的日志信息,以及日志输出级别等

开发类:


  • 日志接口(IPrinter):主要编写可以被外部调用接口,以及可以操作的类型。
  • 日志输出类(LoggerPrinter):实现日志接口,并且对对应的方法,进行处理,最终打印。
  • 日志操作类(Logger):日志操作类(对外公开直接调用),直接调用日志输入类方法。
  • 日志设置(LogConfig):该类主要控制日志输出方式,以及是否输入日志,堆栈方法等。
  • 日志级别(LogLevel):该类主要控制日志级别。
  • 日志配置(LogConstants):该类主要是常量配置信息。

使用方法:


public class MainActivity extends AppCompatActivity {

    // ====================== 其他    =========================
    /** SDCard路径 */
    public static final String BASE_SD_PATH = Environment.getExternalStorageDirectory().getAbsolutePath();
    /** 根目录保存文件夹名*/
    public static final String APP_SD_PATH = BASE_SD_PATH + File.separator + "LoggerPro" + File.separator;
    /** 日志文件夹路径 */
    public static final String LOG_SD_PATH = APP_SD_PATH  + "LogMsg" + File.separator;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // =================== 奔溃保存日志  ====================
        try {
            String s = null;
            s.indexOf("c");
        } catch (NullPointerException e) {
            // 打印格式化后的日志信息
            Logger.other(LoggerUtils.getSortLogConfig("LogPro")).e(e, "s = null");
            // 保存的路径
            String fName = LOG_SD_PATH + System.currentTimeMillis() + ".log";
            // 保存日志信息
            LoggerUtils.saveErrorLog(e, fName, true);
            // --
            // 保存自定义头部、底部信息
            LoggerUtils.saveErrorLog(e, "头部", "底部", LOG_SD_PATH, System.currentTimeMillis() + "_存在头部_底部.log", true);
            // --
            // 自定义(无设备信息、失败信息获取失败) - 正常不会出现,所以其实这个可以不用
            String[] eHint = new String[] {"DeviceInfo = 获取设备信息失败","获取失败"};
            // 保存的路径
            fName = LOG_SD_PATH + System.currentTimeMillis() + "_orgs.log";
            // 保存日志信息
            LoggerUtils.saveErrorLog(e, fName, true, eHint);
        }

        // =================== 打印零散数据  ====================
        ShareMsgVo sMsgVo = new ShareMsgVo();
        sMsgVo.sTitle = "分享Blog";
        sMsgVo.sText = null;
        sMsgVo.sImagePath = "http://t.jpg";
        sMsgVo.sTitleUrl = "http://www.test.com";

        UserInfoVo uInfoVo = new UserInfoVo();
        uInfoVo.uName = "BlogRecord";
        uInfoVo.uPwd = "log_pwd";
        uInfoVo.uAge = 100;

        // 打印分享数据
        Logger.d(LogTools.getShareMsgVoData(sMsgVo));
        // 打印用户数据
        Logger.d(LogTools.getUserInfoVoData(uInfoVo));
        // 打印零散数据
        Logger.d(LogTools.getScatteredData(uInfoVo.uName, sMsgVo.sTitle, uInfoVo.uAge));

        // =================== 打印测试数据  ====================
        /** 日志TAG */
        final String tag = getClass().getName();
        // ====== 使用 BaseApplication 默认配置  ======
        // JSON数组
        Logger.json("[" + Dummy.JSON_WITH_NO_LINE_BREAK + "," + Dummy.JSON_WITH_NO_LINE_BREAK + "]");
        // JSON对象
        Logger.json(Dummy.SMALL_SON_WITH_NO_LINE_BREAK);
        // XML数据
        Logger.xml(Dummy.XML_DATA);
        // =========== 其他 ===========
        Logger.v("测试数据 - v");
        Logger.d("测试数据 - d");
        Logger.i("测试数据 - i");
        Logger.w("测试数据 - w");
        Logger.e("错误 - e");
        Logger.wtf("测试数据 - wtf");
        // --
        Logger.vTag(tag, "测试数据 - v");
        Logger.vTag(tag, "测试数据 - d");
        try {
            Class clazz = Class.forName("asdfasd");
        } catch (ClassNotFoundException e) {
            Logger.e(e, "发生异常");
        }
        // 占位符(其他类型,一样)
        Logger.d("%s测试占位符数据 - d%s",new Object[]{"1."," - Format"});
        // --
        Logger.dTag(tag, "%s测试占位符数据 - d%s",new Object[]{"1."," - Format"});


        // ====== 使用自定义临时配置  ======
        // 自定义配置
        // logger.other(lConfig).d(message);
        // logger.other(lConfig).dTag(tag, message);
        // 打印不换行的日志信息
        Logger.other(LoggerUtils.getDebugLogConfig(tag)).vTag("Temp", "测试数据 - v");
        Logger.other(LoggerUtils.getDebugLogConfig(tag)).d("测试数据 - d");
        Logger.other(LoggerUtils.getDebugLogConfig(tag)).i("测试数据 - i");
        Logger.other(LoggerUtils.getDebugLogConfig(tag)).w("测试数据 - w");
        Logger.other(LoggerUtils.getDebugLogConfig(tag)).e("错误 - e");
        Logger.other(LoggerUtils.getDebugLogConfig(tag)).wtf(tag, "测试数据 - wtf");
        // --
        Logger.other(LoggerUtils.getDebugLogConfig(tag, LogLevel.DEBUG)).json(Dummy.SMALL_SON_WITH_NO_LINE_BREAK);

        // ----
        // 初始化日志配置
        LogConfig lConfig = new LogConfig();
        // 堆栈方法总数(显示经过的方法)
        lConfig.methodCount = 3;
        // 堆栈方法索引偏移(0 = 最新经过调用的方法信息,偏移则往上推,如 1 = 倒数第二条经过调用的方法信息)
        lConfig.methodOffset = 0;
        // 是否输出全部方法(在特殊情况下,如想要打印全部经过的方法,但是不知道经过的总数)
        lConfig.isOutputMethodAll = false;
        // 显示日志线程信息(特殊情况,显示经过的线程信息,具体情况如上)
        lConfig.isDisplayThreadInfo = true;
        // 是否排序日志(格式化后)
        lConfig.isSortLog = true;
        // 日志级别
        lConfig.logLevel = LogLevel.DEBUG;
        // 设置Tag(特殊情况使用,不使用全部的Tag时,如单独输出在某个Tag下)
        lConfig.tag = "SAD";
        // 打印不换行的日志信息
        Logger.other(lConfig).e("new Config - e");

        // ----
        // 使用方法
        LogConfig tLConfig = new LogConfig();
        // 堆栈方法总数(显示经过的方法)
        tLConfig.methodCount = 10;
        // 堆栈方法索引偏移(0 = 最新经过调用的方法信息,偏移则往上推,如 1 = 倒数第二条经过调用的方法信息)
        tLConfig.methodOffset = 0;
        // 是否输出全部方法(在特殊情况下,如想要打印全部经过的方法,但是不知道经过的总数)
        tLConfig.isOutputMethodAll = false;
        // 显示日志线程信息(特殊情况,显示经过的线程信息,具体情况如上)
        tLConfig.isDisplayThreadInfo = true;
        // 是否排序日志(格式化后)
        tLConfig.isSortLog = true;
        // 日志级别
        tLConfig.logLevel = LogLevel.DEBUG;
        // 设置Tag(特殊情况使用,不使用全部的Tag时,如单独输出在某个Tag下)
        tLConfig.tag = "SAD";
        try {
            String s = null;
            s.indexOf("tLConfig");
        } catch (Exception e) {
            // 打印不换行的日志信息
            Logger.other(tLConfig).e(e, "new Config - e");
        }
    }
}

图片:


是否排序日志(格式化后) isSortLog = true:

这里写图片描述

是否排序日志(格式化后) isSortLog = false:

这里写图片描述

代码下载


LoggerPro

猜你喜欢

转载自blog.csdn.net/BlogRecord/article/details/53958689