当前位置: 首页 > article >正文

Android开发 我的开源Android Log “日志狗”LogDog

目录

一、简介

二、LogDog的优点

1、打印的格式

2、日志信息

3、LogDog的使用便利

4、参数优化

5、日志文件输出

6、日志文件的内容加密

三、依赖使用LogDog

1、添加仓库

2、添加依赖

四、使用说明

1、初始化

2、配置说明

3、如何使用和参数说明


一、简介

LogDog是自定义Android log框架,方便Android开发人员更方便的日志打印和日志输出到文件;打印日志时提供了非常行吗的分割符号:

┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━start━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
         //当前线程信息
    ┣┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┫
         // 当前方法栈信息
    ┣┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┫
        //需打印的信息
    ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━end━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

同时在避免日志信息永久存储,提供了日志写入log文件,并保证内容的私密提供加密设置。在打印和输出上,个人认为极大的方便Android开发人员bug的定位和项目的维护、更新、优化提供日志记录。

二、LogDog的优点

1、打印的格式

日志格式采用同一时刻打印,如果超出打印限制则分多次打印,同一时刻打印和较少的日志分割符便用开发人员复制日志信息,而不会因为复制日志造成复制了多余的日志分割符从而不利于开发。

    ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━start━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
         //当前线程信息
    ┣┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┫
         // 当前方法栈信息
    ┣┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┫
        //需打印的信息
    ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━end━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

2、日志信息

除了提供基本的打印信息,还提供了打印当前线程信息,当前方法栈信息: 大概就是四行三块; 第一行是日志开始分割符 注明start; 第一块是线程信息 需要开发人员自行设置开启; 第二行、第三行都是日志的中部信息间隔符; 第二块是当前方法栈信息点击方法内的信息就可直接跳转对应的行数,按顺序打印,所以最后一个方法其实就是打印函数调用的方法; 第三块是需要打印的信息; 第四行是一条日志结束的分割符号。

    ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━start━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
        currentThread: main
    ┣┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┫
        com.ym521.simp.MainActivity.setLog(MainActivity:23)
            com.ym521.simp.MainActivity.initView(MainActivity:37)
                com.ym521.simp.MainActivity.initConfig(MainActivity:28)
    ┣┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┫
    开始测试第一例
    ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━end━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

3、LogDog的使用便利

LogDog使用koltin开发,在对外使用的方法,都采用静态函数(方法):

  LogDog.debug(tag,msg) 
 
  LogDog.info(tag,msg) 

  LogDog.warn(tag,msg) 

  LogDog.error(tag,msg)

当然必须先LogDog.install() 完成LogDog的初始化,个人强烈建议在Application内实现初始化。

4、参数优化

其他Log框架对打印参数都做了限定,LogDog不在限制开发人员打印的参数进行限制,可以是对象、基本类型、数组等都可以;总是在打印 引用类型时会使用Json引擎进行Json转换,JsonEngine LogDog只提供相同的接口,方便开发人员对其自定义实现,采用何种Json框架由开发人员自己决定;当然 这样也就产生了Json引擎是初始化时必要的参数。

5、日志文件输出

Android 原生Log未提供日志文件的写入,LogDog提供了一套以日期中的天为单位的日志文件写入引擎;因为是以天为日志文件单位,所有一天之内的日志都只会在一个文件内;为了避免 过多的权限申请,所以日志文件采用APP内部私有空间,但是为了方便日志文件的外部提取,LogDog也提供APP外部私有空间的存储,只需要在初始化LogDog 进行配置开启就可以了,因为都是私有空间所以都 不用权限申请。

提示:内部私有空间:日志文件地址 data/你的包名/app_logdog/;

           外部私有空间:Android/data/你的包名/files/logdog/。

6、日志文件的内容加密

有时日志内容涉及用户和系统、APP的涉密信息,所以需要对日志文件内的内容进行加密,避免在用户提取日志文件时造成信息泄密威胁运行的系统安全,所以日志文件加密很重要,当然LogDog也提供了日志文件加密 只需要在初始化LogDog 进行开启AES和配置Key就可以了,并且加密只加密 打印数据部分对于TAG、时间戳 log等级不进行加密,由于加密是采用逐条Log加密的所以解密也需要逐条Log解密; 这个问题后期版本会采用整体加密或者其他加密形式优化这个问题。

三、依赖使用LogDog

1、添加仓库


maven { url 'https://jitpack.io' }

2、添加依赖


dependencies {

	        implementation 'com.gitee.ym521:logdog:1.0.2'

	}

四、使用说明

1、初始化

个人建议最好在Application的onCreate()中先调用;记得在AndroidManifest.xml 设置自定义的Application!!!

kotlin:

class MyApplication : Application() {

    override fun onCreate() {
        super.onCreate()
        //这里使用的是 Google开源 Gson 也可以使用其他Json 框架 如:阿里的FastJson
        val gson = Gson()

        val logDog = LogDog.Builder()
            .logWriteLogFileEnable(true) //是否开启写入日志文件
            .logShowMethodEnable(true) //是否开启显示方法栈信息 默认打印两个方法信息
            .logShowThreadInfoEnable(true) //是否打印当前线程信息
            .build()
        //开发人员自行实现对象转json字符串
        logDog.install(this, object : IJsonEngine {
            override fun <T> toJSON(obj: T): String {
                return gson.toJson(obj)
            }
        })
    }
}
Java:
public class MyApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        //这里使用的是 Google开源 Gson 也可以使用其他Json 框架 如:阿里的FastJson
        Gson gson = new Gson();
        LogDog logDog = new LogDog.Builder()  //配置说明同上 kotlin
                .logWriteLogFileEnable(false)
                .logShowMethodEnable(true, 2)
                .logShowThreadInfoEnable(true)
                .build();

        logDog.install(this, new IJsonEngine() {
            @NonNull
            @Override
            public <T> String toJSON(T obj) {
                return gson.toJson(obj);
            }
        });
    }
}

2、配置说明

val logDogBuilder = LogDog.Builder()
            .logShowEnable(true) //是否打印日志

            .logShowMethodEnable(false) //是否打印方法信息和打印多少个方法信息 默认2个

            .logShowThreadInfoEnable(false) //是否打印线程信息

            .logWriteLogFileEnable(false) //是否将日志写入日志文件中

            .logFileAESEnable(false,"0000000000000000") //是否启动AES 加密 可以不配秘钥 默认秘钥: 0000000000000000 注意秘钥字符串转byte数组必须是16个否则开启加密失败

            .logFileShowEnable(false) //是否将日志文件输出到外部私有空间 用于日志文件的提取

            .setDefaultTAG("LOGDOG") //自定义 设置,没有自行填写的TAG的统一缺省TAG 默认:LOGDOG

            .build()    

3、如何使用和参数说明

  LogDog.debug(tag,msg) //对应 Log.d 

 
  LogDog.info(tag,msg) //对应 Log.i


  LogDog.warn(tag,msg) //对应 Log.w


  LogDog.error(tag,msg)//对应 Log.e

提示:TAG属于可选参数,可以不填写,如果不填写LogDog使用setDefaultTAG的TAG,如果也没有设置将使用默认值‘LOGDOG’,msg 对类型没有要求。

如果对您有一些意义,希望您给博主一些鼓励(点赞、关注、收藏),如果这个LogDog有BUG欢迎大家提出。


http://www.kler.cn/a/17047.html

相关文章:

  • Vue2:组件
  • C++ 编程基础(6)作用域 | 6.3、类作用域
  • 使用elementUI实现表格行拖拽改变顺序,无需引入外部库
  • SAP_MM_SD_PP_FICO_视频课程几乎免费送
  • 区块链技术在电子政务中的应用
  • ESLint 使用教程(三):12个ESLint 配置项功能与使用方式详解
  • 《通过十几轮数据进行模型训练,实现精确的无创血糖测量的演绎学习》阅读笔记
  • CC2642 读取和设置FEATURES
  • path/to/sdkmanager --install “cmdline-tools;latest“
  • k8s搭建教程
  • 内网渗透(六十一)之Kerberosating攻击
  • MySQL知识学习02(MySQL索引详解)
  • 【软考高级】2022年系统分析师综合知识
  • [java]云HIS运维运营分系统功能实现(springboot框架)
  • 【Java笔试强训 4】
  • 08-Vue技术栈之过度与动画
  • 如何使用CSS和JS实现一个响应式的滚动时间轴
  • 你最关心的4个零代码问题,ChatGPT 帮你解答了!
  • Python基础合集 练习22 (错误与异常处理语句2)
  • 【Spring6】| Spring6整合JUnit
  • 【Git】‘git‘ 不是内部或外部命令,也不是可运行的程序
  • 2016 ICPC合肥站 传递 HDU-5961(拓扑排序 / bitset / 暴力(可hack))
  • 相交链表 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。
  • 2.6 浮点运算方法和浮点运算器
  • c++ 入门概述
  • WEB攻防通用漏洞跨域CORS资源JSONP回调域名接管劫持