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

Android 优化 - 日志 Log

一、概念

日志级别对应方法场景建议
verboseLog.v()高频调试信息:循环内部状态、事件追踪。

debugLog.d()调试关键路径:函数参数、数据转换结果。
infoLog.i()系统核心事件:如应用启动、用户关键操作。

控制频率,避免高频场景(如循环内)记录。
warnLog.w()潜在风险:非预期参数但可恢复、资源接近阈值。建议绑定监控告警(如磁盘空间不足触发通知)。
errorLog.e()可恢复错误:网络超时、文件读取失败。记录完整上下文(错误码、参数、堆栈),绑定自动告警。

二、优化

2.1 动态开关

根据模块化、业务条件、远程等环境,动态的配置全局开关控制日志输出,避免影响APP性能。

object LogUtils {var enable = false
}class MyApplication : Application() {override fun onCreate() {LogUtils.enable = ...}
}

2.2 关闭日志,参数依然会进行计算

2.2.1 问题说明

下方代码,当日志开关设置为 false 时,对 message 的传参虽然会被丢弃,但还是会先执行得出该参数的代码。

object LogUtils {var enabled = falsefun d(tag: String, message: String) {if (enabled) {Log.d(tag, message)}}
}LogUtils.d("tag", "打印:${ System.currentTimeMillis() }")    //会创建StringBuilder,获取时间戳,拼接字符串,最后丢弃
LogUtils.d("tag", "打印:$dataClass"}    //会执行数据类的toString()

2.2.2 解决办法

使用 Lambda 延迟到真正使用的时候执行,使用 inline 避免 Lambda 对象生成。

inline fun d(tag: String, message: () -> String) {if (enable) {Log.d(tag, message())}
}

三、封装工具类

object LogUtils {var enable = falseinline fun v(tag: String, message: () -> String) {if (enable) {Log.v(tag, message())}}inline fun d(tag: String, message: () -> String) {if (enable) {Log.d(tag, message())}}inline fun i(tag: String, message: () -> String) {if (enable) {Log.i(tag, message())}}inline fun w(tag: String, message: () -> String) {if (enable) {Log.w(tag, message())}}inline fun e(tag: String, message: () -> String) {if (enable) {Log.e(tag, message())}}}
http://www.dtcms.com/a/312673.html

相关文章:

  • LeetCode513:找树最左下角的值(bfs+dfs)
  • 【鸿蒙高级】
  • [硬件电路-148]:数字电路 - 什么是CMOS电平、TTL电平?还有哪些其他电平标准?发展历史?
  • 动感按钮:如何打造交互感十足的点击动画效果
  • 【1】WPF界面开发入门—— 图书馆程序:登录界面设计
  • 基于图像识别与分类的中国蛇类识别系统
  • [硬件电路-151]:数字电路 - 模拟电路与数字电路的本质
  • 【数据结构】二叉树的顺序结构实现
  • SQL注入SQLi-LABS 靶场less31-38详细通关攻略
  • 托福阅读38-3
  • 使用AssemblyAI将音频数据转换成文本
  • AI生成图片工具分享!
  • Linux的权限概念
  • 关于Web前端安全之XSS攻击防御增强方法
  • 【视频内容创作】PR的关键帧动画
  • 机器学习第三课之逻辑回归(三)LogisticRegression
  • Python-初学openCV——图像预处理(五)
  • 团队独立思考的力量
  • 论文阅读:DMD蒸馏 | One-step Diffusion with Distribution Matching Distillation
  • Python 动态属性和特性(定义一个特性工厂函数)
  • 「源力觉醒 创作者计划」_文心大模型4.5系列开源模型, 从一行代码到一个生态:聊聊开源战略那些事儿,顺便扯扯文心大模型 4.5 的使用心得
  • zookeeper分布式锁 -- 读锁和写锁实现方式
  • gpu instancer crowd 使用自定义材质并且只修改单个物体的材质参数
  • 【领域热点】【Vue】Vue 与 WebAssembly:前端性能优化的黄金搭档
  • 渗透高级-----应急响应
  • 机器翻译的分类:规则式、统计式、神经式MT的核心区别
  • 新电脑上GitHub推送失败?全面排查与解决指南
  • 第三章-提示词-高级:开启智能交互新境界(13/36)
  • Flutter Dart类的使用
  • WebMvc自动配置流程讲解