当前位置:首页 > 技术文章 > 正文内容

Android使用Logger开发App本地日志记录功能

u3blog1年前 (2022-10-12)技术文章746

前言

记录日志是一个App常用的功能,很多软件都会有,它能帮助开发者快速确定问题位置,可以说是App维护的基础。

项目现状

之前我们的项目没有记录日志到本地的功能,每次排查问题都非常的费劲,需要本地能复现才能解决问题,但是有些问题并不是我们本地能复现的,比如客户环境在内网,无法访问,或者只有特定手机出现问题,这时候我们就束手无策了。

开发目的

为了更好的手机问题信息,并且让用户简单的去获取日志,发给开发者,我们急需记录日志到本地的功能,并且提供开关给客户,让客户方便的进行操作。

探索过程

经过搜索对比,最终选取了Logger日志库作为开发的基础,这个库比较知名,出了问题也有很多资料,而且使用简单,功能全面,甚至提供了基础的记录日志到本地的能力,应该能满足我们的需求。

这个库的地址是https://github.com/orhanobut/logger

但是这个库有一些小问题需要我们通过开发去补全。

  • 记录的目录需要改变,默认的目录都在同一个,不然有其他的app使用了Logger记录日志功能,就会混在一起
    默认的情况是这样的

    需要变成这样

  • 记录的文件名字需要改变,标记日期,否则用户不知道哪个日志是最新的,不好发过来
    莫默认情况是这样的,我们想加上日志标识,让用户看得懂


变成这个样子

  • 需要有一个开关来控制是否开启记录,并且在一定时间之后自动停止记录,并删除超期的日志文件,这一步主要是为了app的安全性,否则通过日志会泄露一些重要的信息
    比如这样
  • 为了单独分析网络请求情况,我们还需要把网络请求信息单独放到一个文件里面,也就是一个logger同时往两个文件输出日志

    具体步骤

  • 集成logger,并按照官方文档实现记录日志到本地功能
    这一步很简单,照着官方文档做就行了
  • 修改logger的TextDiskLogStrategy和TextFormatStrategy文件,实现日志的分文件、路径存放
    这一步需要把logger的源码进行一些改造,具体来说分为两个部分
    1.TextDiskLogStrategy – 继承FormatStrategy,在内部可以通过log方法给日志信息加一些附加信息,比如时间戳或者换行,并且定义一个handlerthread并获取handler,方便子线程使用它来往文件里写日志


2.TextFormatStrategy–继承自LogStrategy,使用handler进行日志的写入工作,通过what类型的不同,写入到不同的目录
通过tag不同,发送不同的message

内部还有个处理的handler,用来接收并真正执行日志文件的写入,根据不同类型写入不同文件,并且对日志使用加密算法加密,保证客户不能直接读取文件内容,确保安全性。至于如何加密,就可以根据实际情况使用不同的算法进行操作。

  • 写一个工具类,通过开关来控制是否进行日志的输出操作,并定时关闭开关
  1. 每次app启动的时候,扫描日志目录,判断文件创建时间,如果超过三天,就删除
  2. 使用一个shareprefrence的值来保存是否开启调试模式,并记录开启时间,每次应用启动的时候检测这两个值,并比较,如果超过时间就把debug变量还原,这样就不会继续输出日志了

    关于安全性的考量

    由于日志里面记录的信息有可能涉及一些敏感的东西,我们必须做好防护,上面说到的三天之后删除,24小时自动关闭记录,加密日志都是为了防止用户敏感信息泄露出去。

这个功能只能在用户知情的情况下,主动开启,并且只能使用有限的时间。

回顾总结

这个功能开发起来并不是非常困难,但是结合产品的过程可以引发一些思考

  1. 为了获取信息的便捷性,这个功能不可或缺,否则很多问题光靠开发复现费时费力
  2. 为了记录的清晰,要把网络请求和logcat日志分开记录
  3. 为了用户信息的安全,需要设置开关和自动关闭功能,并且给日志加密

以前做一个功能的时候,考虑的可能就是实现这个功能,记录日志这个功能其实非常简单

但是要考虑到安全性和易用性,做起来还是有很多的工作,写代码的过程往往就是简单功能,复杂实现

为了堵住所有可能的口子,往往需要对一个功能有更全面的思考,开始思考这些问题,也是编程经验提升的一种象征。

扫描二维码推送至手机访问。

版权声明:本文由u3blog发布,如需转载请注明出处。

本文链接:https://u3blog.xyz/?id=701

分享给朋友:

“Android使用Logger开发App本地日志记录功能 ” 的相关文章

开源数据库Postgresql安装/卸载总结

What Postgresql一个开源数据库,类似mysql,由于mysql被收购了,这个数据库正被越来越多的使用 怎么安装?安装非常简单,但是安装过后的初始化还是有点麻烦,具体可以看这篇文章为什么要卸载?安装好之后,如果你很倒霉的话,会遇到postgresql服务怎么都启动不了,输入psql指令显...

AndroidStudio插件开发——RemoveButterKnife从构思到实现

ReomveButterKnife插件这是一个用于移除代码中对ButterKnife使用的AS插件,接下来我们将从头开始讲讲AS插件开发和这个插件的开发过程地址是<a href="https://github.com/u3shadow/RemoveButterKnife"...

项目的改造——RemoveButterKnife插件代码的重构

前言这篇文章记述了我的插件RemoveButterKnife的代码改进过程以及思路,关于插件,各位可以看RemoveButterKnife代码库,关于文章,可以看构思到实现RemoveButterKnife 原因近期想给原来的插件RemoveButterKnife加入一些新的功能,发现以前的代码没...

项目的升级-给RemoveButterKnife插件增加新功能

前言经过项目的初步编写和进一步改造,RemoveButterKnife插件终于也有模有样了,但是,功能上仅仅支持Activity/Fragment的BindView注解。 关于编写和优化的过程可以看下面两篇文章项目构造RemoveButterKnife 项目改进-重构RemoveButterKn...

Android测试体系-在MVVM架构中如何测试Model层与ViewModel层

背景此文章是对于google code lab中《Introduction to Test Double and Dependence injection》 与 《Testing Basics》的总结,本篇主要讲述如何在mvvm架构的android项目中对Model层以及ViewModel层进行测试...

使用Databinding为Recyclerview使用同一个ViewHolder加载不同Item

提示:在阅读本篇文章前,你最好对android databinding有一定了解,本文使用的代码均为kotlin,但是不用担心,都很简单 最近在写项目的时候使用了databinding技术,突发奇想,databinding是不是也能应用于recyclerview中,让加载多个不同的item更简单呢...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。