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

news/2024/7/5 11:36:47

目录

一、简介

二、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://lihuaxi.xjx100.cn/news/1087692.html

相关文章

stable diffusion的使用

文章目录 1 文生图1.1 mountains and trees and gree1.2 three dogs1.3 cats1.4 three lovely cats1.5 beautiful girl1.6 机器猫1.7 卡通图像生成 1 文生图 1.1 mountains and trees and gree 1.2 three dogs 1.3 cats 1.4 three lovely cats 1.5 beautiful girl stable diff…

Linux主机信息搜集

1、系统架构 打印系统信息 uname -a 文件 /etc/issue是一个文本文件&#xff0c;其中包含要在登录提示之前打印的消息或系统标识 cat /etc/issue /etc/lsb-release&#xff0c;/etc/redhat-release文件包含一个被解析以获取信息的描述行 cat /etc/*-release /proc/versi…

MLC LLM:将大模型运行在手机端的部署工具

前言 MLC LLM 是一个通用的解决方案 它允许任何语言模型在不同的硬件后端和本地应用程序集上进行本地部署 并为每个人提供一个高效的框架&#xff0c;以进一步优化模型的性能&#xff0c;满足他们自己的用例 其使命是让每个人都能在自己的设备&#xff08;如手机端&#xf…

大学生学java编程的就业前景怎么样?我来聊聊自己的见解

今天兴哥想跟大家分享一个话题&#xff0c;就是学java到底好不好找工作。因为我发现很多粉丝朋友&#xff0c;之前可能并不是从事IT行业的&#xff0c;然后想转行来做这一行&#xff0c;或者是有些大四即将面临毕业的老哥&#xff0c;可能大学没有好好学习吧&#xff0c;然后专…

CSS媒体查询(@media)全面解析

随着移动设备的快速普及&#xff0c;用户不再只是通过传统的电脑系来浏览 Web 内容&#xff0c;越来越多的用户开始使用各种尺寸的智能手机、平板电脑或者其它设备来浏览 Web 内容&#xff0c;为了确保使用不同设备的用户都能拥有不错的体验就需要用到媒体查询。 媒体查询是 CS…

贪心算法OJ刷题(2)

多机调度问题 题目描述 某工厂有n个独立的作业&#xff0c;由m台相同的机器进行加工处理。作业i所需的加工时间为 t i t_i ti​&#xff0c;任何作业在被处理时不能中断&#xff0c;也不能进行拆分处理。现厂长请你给他写一个程序&#xff1a;算出n个作业由m台机器加工处理的…

PromQL,让你轻松实现监控可视化!快来了解一下吧!

Prometheus 中的一些关键设计&#xff0c;比如注重标准和生态、监控目标动态发现机制、PromQL等。 PromQL 是 Prometheus 的查询语言&#xff0c;使用灵活方便&#xff0c;但很多人不知道如何更好利用它&#xff0c;发挥不出优势。 PromQL主要用于时序数据的查询和二次计算场…

【热门框架】Maven依赖传递,可选依赖以及排除依赖指的是什么?有什么意义?

Maven依赖传递是指当一个项目依赖另一个项目时&#xff0c;Maven会自动下载并构建这些依赖项&#xff0c;同时还会将这些依赖项所依赖的其他项一并下载并构建。这个过程会一直递归下去&#xff0c;直到所有依赖的项都被下载并构建完成。这个过程就称为依赖传递。 依赖传递可以…