惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

K
Kaspersky official blog
Martin Fowler
Martin Fowler
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
V
Visual Studio Blog
博客园_首页
Engineering at Meta
Engineering at Meta
The Cloudflare Blog
MongoDB | Blog
MongoDB | Blog
Blog — PlanetScale
Blog — PlanetScale
T
The Blog of Author Tim Ferriss
雷峰网
雷峰网
D
Docker
博客园 - 司徒正美
S
SegmentFault 最新的问题
M
MIT News - Artificial intelligence
博客园 - 叶小钗
博客园 - 三生石上(FineUI控件)
U
Unit 42
J
Java Code Geeks
A
About on SuperTechFans
N
Netflix TechBlog - Medium
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
S
Security Affairs
I
Intezer
Cisco Talos Blog
Cisco Talos Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
B
Blog RSS Feed
P
Privacy & Cybersecurity Law Blog
T
Tenable Blog
T
Threatpost
H
Hacker News: Front Page
G
Google Developers Blog
博客园 - 【当耐特】
Hugging Face - Blog
Hugging Face - Blog
Apple Machine Learning Research
Apple Machine Learning Research
L
Lohrmann on Cybersecurity
大猫的无限游戏
大猫的无限游戏
Google DeepMind News
Google DeepMind News
A
Arctic Wolf
S
Secure Thoughts
GbyAI
GbyAI
NISL@THU
NISL@THU
S
Security @ Cisco Blogs
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Webroot Blog
Webroot Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
O
OpenAI News
Spread Privacy
Spread Privacy
Application and Cybersecurity Blog
Application and Cybersecurity Blog

u3blog

从手动配置到自然语言生成规则:一个 Android AI 工具的重构实录 - u3blog 学习版游戏自制云存档同步的方法探索以及总结 - u3blog 鸿蒙next中web组件和navigation的一个bug以及处理方案 - u3blog ChatGPT是怎么帮我写ios代码的 - u3blog Android项目cicd流程总结(使用jenkins) - u3blog 一张启动图引发的思考--探索.9图原理和应用场景 - u3blog 跟我一起玩Paging3 - u3blog Android中使用ASPECTJ进行用户操作路径跟踪与日志搜集 - u3blog 彻底摆脱数据线——远程ADB调试小工具开发过程记录 - u3blog 自己实现一个Android网络图片加载器 - u3blog
Android使用Logger开发App本地日志记录功能 - u3blog
2022-10-12 · via u3blog

前言

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

项目现状

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

开发目的

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

探索过程

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

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

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

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

    需要变成这样

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


变成这个样子


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

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

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

    关于安全性的考量

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

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

回顾总结

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

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

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

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

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