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

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.xdnf.cn/news/16893.html

相关文章:

  • 【MySQL进阶】------MySQL程序
  • 自动驾驶控制算法——LQR控制算法
  • MySQL极简安装挑战
  • MySQL事务与存储引擎的学习(一)
  • 智能化设备维护:开启高效运维新时代
  • 新手向:Python制作贪吃蛇游戏(Pygame)
  • 力扣经典算法篇-42-矩阵置零(辅助数组标记法,使用两个标记变量)
  • LangChain4J入门:接入大模型
  • 解决飞书文档中PDF文档禁止下载的问题
  • TCP-单线程版本
  • 配置阿里云与云产品流转发
  • LWIP从FreeRTOS到uC/OS-III的适配性改动
  • 多向量检索:lanchain,dashvector,milvus,vestorsearch,MUVERA
  • 嵌入式 C 语言入门:多文件编程实践笔记 —— 从文件创建到调用
  • visual studio code 怎样将主题修改成亮色,并且配置中文界面
  • 基于transformer的目标检测——匈牙利匹配算法
  • 仓库管理系统-14-前端之侧边栏区域Aside的集中式状态管理菜单和动态路由
  • 死锁深度解析:原理、检测与解决之道
  • Spring Boot 整合 Minio 实现高效文件存储解决方案(本地和线上)
  • 【十九、Javaweb-day19-Linux概述】
  • Pytorch 报错-probability tensor contains either ‘inf‘, ‘nan‘ or element < 0 解决方案
  • Odoo OWL前端框架全面学习指南 (后端开发者视角)
  • 机器学习——决策树
  • K8S部署ELK(四):部署logstash
  • JDBC核心技术与预编译SQL实战
  • 2、RabbitMQ的5种模式基本使用(Maven项目)
  • 算法竞赛阶段二-数据结构(39)数据结构栈模拟实现
  • npm ERR! code CERT_HAS_EXPIRED:解决证书过期问题
  • PHP入门及数据类型
  • Noob靶机攻略