Android Studio 日志系统详解
文章目录
- 一、Android 日志系统基础
- 1. Log 类
- 2. 日志级别
- 二、Android Studio 中的 Logcat
- 1. 打开 Logcat
- 2. Logcat 界面组成
- 3. 常用 Logcat 命令
- 三、高级日志技巧
- 1. 自定义日志工具类
- 2. 打印方法调用栈
- 3. 打印长日志
- 4. JSON 和 XML 格式化输出
- 四、Logcat 高级功能
- 1. 自定义日志格式
- 2. 保存日志到文件
- 3. 使用命令行 Logcat
- 4. 条件日志记录
- 五、日志最佳实践
- 六、常见问题解决
- 七、替代日志方案

Android 开发中的日志系统是调试和问题排查的重要工具,下面我将全面介绍 Android Studio 中的日志功能和使用方法。
一、Android 日志系统基础
1. Log 类
Android 提供了 android.util.Log
类用于输出日志,包含以下常用方法:
Log.v(String tag, String msg); // Verbose - 最详细日志
Log.d(String tag, String msg); // Debug - 调试信息
Log.i(String tag, String msg); // Info - 重要信息
Log.w(String tag, String msg); // Warn - 警告信息
Log.e(String tag, String msg); // Error - 错误信息
Log.wtf(String tag, String msg); // Assert - 严重错误
2. 日志级别
级别 | 方法 | 说明 |
---|---|---|
VERBOSE | Log.v() | 最详细日志,开发调试使用 |
DEBUG | Log.d() | 调试信息,发布时应移除 |
INFO | Log.i() | 重要运行信息 |
WARN | Log.w() | 潜在问题警告 |
ERROR | Log.e() | 错误信息,但不影响应用继续运行 |
ASSERT | Log.wtf() | 严重错误,通常会导致应用崩溃 |
二、Android Studio 中的 Logcat
Logcat 是 Android Studio 内置的日志查看工具,可以查看设备或模拟器的系统日志和应用日志。
1. 打开 Logcat
- 方式1:底部工具栏点击 “Logcat” 标签
- 方式2:菜单栏 View → Tool Windows → Logcat
- 快捷键:Alt+6 (Windows/Linux) 或 Command+6 (macOS)
2. Logcat 界面组成
- 设备选择下拉框:选择要查看日志的设备
- 应用选择下拉框:选择要查看的应用进程
- 日志级别筛选:可按级别过滤日志
- 搜索框:可按关键字搜索日志
- 日志显示区域:显示日志内容
- 日志配置菜单:自定义日志显示格式
3. 常用 Logcat 命令
在 Logcat 搜索框中可以使用以下语法:
tag:MyTag
- 按标签过滤level:error
- 按级别过滤package:mine
- 只看当前应用日志"keyword"
- 按关键字搜索tag:MyTag level:error
- 组合条件
三、高级日志技巧
1. 自定义日志工具类
public class LogUtil {private static final String DEFAULT_TAG = "MyApp";private static final boolean DEBUG = BuildConfig.DEBUG;public static void v(String tag, String msg) {if (DEBUG) Log.v(tag, msg);}public static void d(String tag, String msg) {if (DEBUG) Log.d(tag, msg);}public static void i(String tag, String msg) {Log.i(tag, msg);}public static void w(String tag, String msg) {Log.w(tag, msg);}public static void e(String tag, String msg) {Log.e(tag, msg);}// 自动获取类名作为tagpublic static void d(Object object, String msg) {if (DEBUG) {String tag = object.getClass().getSimpleName();Log.d(tag, msg);}}
}
2. 打印方法调用栈
Log.d("TAG", "Current call stack:", new Throwable());
3. 打印长日志
Android 的 Logcat 有长度限制,可以使用以下方法打印长日志:
public static void longLog(String tag, String content) {if (content.length() > 4000) {Log.d(tag, content.substring(0, 4000));longLog(tag, content.substring(4000));} else {Log.d(tag, content);}
}
4. JSON 和 XML 格式化输出
public static void logJson(String tag, String json) {try {String prettyJson = new JSONObject(json).toString(4);Log.d(tag, prettyJson);} catch (JSONException e) {Log.e(tag, "Invalid JSON: " + json);}
}
四、Logcat 高级功能
1. 自定义日志格式
点击 Logcat 右上角的齿轮图标 → “Edit Filter Configuration” 可以:
- 修改日志显示格式
- 添加自定义字段
- 保存日志过滤器
2. 保存日志到文件
- 点击 Logcat 工具栏的 “Export” 按钮
- 选择保存位置和文件名
- 可以选择保存当前显示的日志或完整日志
3. 使用命令行 Logcat
# 查看日志
adb logcat# 按标签过滤
adb logcat -s MyTag# 按级别过滤
adb logcat *:E# 清除日志
adb logcat -c# 将日志保存到文件
adb logcat > log.txt
4. 条件日志记录
if (BuildConfig.DEBUG) {Log.d("TAG", "Debug information");
}
五、日志最佳实践
-
标签命名规范:
- 使用类名作为标签:
private static final String TAG = MainActivity.class.getSimpleName();
- 保持标签简洁明了
- 使用类名作为标签:
-
日志内容规范:
- 包含足够上下文信息
- 避免记录敏感信息(如密码、token等)
- 生产环境移除调试日志
-
性能考虑:
- 避免在循环中记录大量日志
- 字符串拼接使用 StringBuilder
-
发布应用处理:
- 使用 ProGuard 移除调试日志
- 或使用日志工具类控制日志输出
if (BuildConfig.DEBUG) {// 调试日志
}
六、常见问题解决
-
Logcat 不显示日志:
- 检查设备是否连接
- 检查是否选择了正确的应用进程
- 尝试重启 ADB:
adb kill-server && adb start-server
-
日志太多难以查找:
- 使用过滤器
- 添加唯一标识符到你的日志
- 使用
package:mine
只看当前应用日志
-
日志丢失或不全:
- 增加日志缓冲区大小:
adb logcat -G 4M
- 及时保存重要日志
- 增加日志缓冲区大小:
-
性能分析日志:
- 使用
adb shell dumpsys
获取系统信息 - 使用 Android Profiler 进行性能分析
- 使用
七、替代日志方案
-
Timber:流行的日志库,提供更简洁的API
Timber.d("Debug message with %s", argument);
-
Logger:美观的日志格式化库
Logger.d("Hello %s", "World");
-
Crashlytics:崩溃日志收集
FirebaseCrashlytics.getInstance().log("Important event");
-
自定义日志系统:将日志发送到服务器进行分析
通过合理使用 Android Studio 的日志功能,可以大大提高开发效率和问题排查能力。建议根据项目需求建立统一的日志规范,并在团队中贯彻执行。
相关文章:
Android Studio 日志系统详解
文章目录 一、Android 日志系统基础1. Log 类2. 日志级别 二、Android Studio 中的 Logcat1. 打开 Logcat2. Logcat 界面组成3. 常用 Logcat 命令 三、高级日志技巧1. 自定义日志工具类2. 打印方法调用栈3. 打印长日志4. JSON 和 XML 格式化输出 四、Logcat 高级功能1. 自定义日…...
【LLM】A2A 与 MCP:剖析 AI Agent 互联时代的两种关键协议
随着人工智能技术的飞速发展,AI Agent(智能体)正从理论走向实践,有望成为提升生产力的关键。然而,正如历史上任何新兴技术领域一样,标准的缺失导致了“筒仓效应”——不同来源、不同框架构建的 Agent 难以有…...
解析大尺寸液晶屏视觉检测,装配错位如何避免?
在3C电子产品种类飞速发展的今天,大尺寸液晶屏已成为市场主流,消费刚需。消费者对手机屏幕的视觉体验要求不断攀升,屏占比的提升成为各大手机厂商竞争的焦点。然而,大尺寸液晶屏在生产过程中面临着诸多检测难题,严重影…...
巴法云平台-TCP设备云-微信小程序实时接收显示数据-原理
微信小程序通过WebSocket或HTTP长轮询连接平台(而非直接使用TCP)!!! 物联网平台对协议层的一种封装设计——将底层通信协议(如TCP)与应用层业务逻辑(如主题路由)解耦&am…...
ElementNotInteractableException原因及解决办法
在自动化测试中,ElementNotInteractableException是一个常见的异常,它通常发生在尝试与网页上的某个元素进行交互(例如点击、输入等操作)时,但由于该元素当前不可交互。这可能由多种原因引起,以下是一些常见的原因及其解决方法: 元素未完全加载 如果尝试与页面上的元素交…...
信息系统项目管理师-工具名词解释(上)
本文章记录学习过程中,重要的知识点,是否为重点的依据,来源于官方教材和历年考题,持续更新共勉 本文章记录学习过程中,重要的知识点,是否为重点的依据,来源于官方教材和历年考题,持续更新共勉 数据收集 头脑风暴 在短时间内获得大量创意,适用于团队环境,需要引导者…...
CSI-external-provisioner
main() 这段Go代码是一个CSI(容器存储接口)Provisioner(供应器)的实现,用于在Kubernetes集群中动态提供持久卷。代码涉及多个组件和步骤,下面是对关键部分的解释: 初始化和配置 命令行标志和…...
OpenAI为抢跑AI,安全底线成牺牲品?
几年前,如果你问任何一个AI从业者,安全测试需要多长时间,他们可能会淡定地告诉你:“至少几个月吧,毕竟这玩意儿可能改变世界,也可能毁了它。”而现在,OpenAI用实际行动给出了一个新答案——几天…...
单片机任意普通IO引脚使用定时器扩展外部中断的巧妙方法
在嵌入式系统中,将任意一个IO端口配置为外部中断源是一种常见的需求,尤其是在硬件资源有限的情况下。通过定时器扩展外部中断的方法,可以在不依赖专用中断引脚的情况下,实现对外部信号的实时响应。以下是一种基于定时器扩展外部中…...
arcgis几何与游标(1)
本节我们对几何进行展开学习 ArcPy 的几何对象 在 ArcPy 中,几何对象是表示地理空间数据的核心。它包括点(Point)、多点(Multipoint)、线(Polyline)和面(Polygon)等类型…...
安全密码处理实践
1. 引言 在现代应用程序中,密码存储和验证的安全性 直接关系到用户数据的保护。密码泄露事件频繁发生,通常是由于不安全的存储方式 或 弱加密处理 导致的。为了提高密码的安全性,开发者需要遵循一系列安全密码处理 的最佳实践。 本篇文章将详细介绍如何在应用程序中安全地…...
can‘t set boot order in virtualbox
Boot order setting is ignored if UEFI is enabled https://forums.virtualbox.org/viewtopic.php?t99121 如果勾选EFI boot order就是灰色的 传统BIOS就是可选的 然后选中任意介质,通过右边的上下箭头调节顺序,最上面的应该是优先级最高的 然后就…...
电池分选机详细介绍
在当今这个科技飞速发展的时代,电池作为能源存储的重要载体,其性能的一致性和稳定性对于各类电子设备和电动汽车等应用至关重要。而电池分选机,作为电池生产过程中的关键环节,正扮演着越来越重要的角色。本文将带您深入了解电池分…...
深入理解浏览器的 Cookie:全面解析与实践指南
在现代 Web 开发中,Cookie 扮演着举足轻重的角色。它不仅用于管理用户会话、记录用户偏好,还在行为追踪、广告投放以及安全防护等诸多方面发挥着重要作用。随着互联网应用场景的不断丰富,Cookie 的使用和管理也日趋复杂,如何在保障…...
浙江大学DeepSeek系列专题线上公开课第二季第五期即将上线!deepseek人文艺术之美专场来啦!
浙江大学DeepSeek系列专题线上公开课第二季第五期即将重磅上线! 其中,今晚7点半,浙大AI大神陈为教授将带来硬核的deepseek公开课讲座。 讲座 主题: DeepSeek时代,让AI更懂中国文化的美与善 主讲人: 陈为 …...
5分钟学会接口自动化测试框架
今天,我们来聊聊接口自动化测试。 接口自动化测试是什么?如何开始?接口自动化测试框架如何搭建? 自动化测试 自动化测试,这几年行业内的热词,也是测试人员进阶的必备技能,更是软件测试未来发…...
Flink DataStream API深度解析(Scala版):窗口计算、水位线与状态编程
在前面的文章中Flink 编程基础:Scala 版 DataStream API 入门-CSDN博客,我们已经介绍了 Flink 的 Datastream API 编程模型、窗口划分以及时间语义(处理时间、事件时间等)。本篇文章将深入讲解窗口计算的进阶内容,包括…...
【从零实现高并发内存池】内存池整体框架设计 及 thread cache实现
📢博客主页:https://blog.csdn.net/2301_779549673 📢博客仓库:https://gitee.com/JohnKingW/linux_test/tree/master/lesson 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! &…...
#MES系统中的一些相关的名词
📌MES系统 部分 术语表 缩写英文全称中文名称详细解释MESManufacturing Execution System制造执行系统用于连接计划系统与生产现场,实时管理和控制整个生产过程,覆盖物料、人员、设备、质量、指令等。ERPEnterprise Resource Planning企业资…...
《灵活的接口设计:如何支持多种后端数据存取实现》
《灵活的接口设计:如何支持多种后端数据存取实现》 一、引言:从单一适配到多样需求 在现代软件开发中,系统通常需要与不同的数据存储后端进行交互,例如关系型数据库(MySQL、PostgreSQL)、NoSQL 数据库(MongoDB、Redis)或文件存储(JSON、CSV)。为了增强系统的可扩展性…...
Spark-SQL核心编程(一)
一、Spark-SQL 基础概念 1.定义与起源:Spark SQL 是 Spark 用于结构化数据处理的模块,前身是 Shark。Shark 基于 Hive 开发,提升了 SQL-on-Hadoop 的性能,但因对 Hive 依赖过多限制了 Spark 发展,后被 SparkSQL 取代&…...
Qt:解决MSVC编译器下qDebug输出中文乱码的问题
问题描述: 使用msvc编译器,通过qDebug输出打印信息为乱码(显示问号或者乱码) 百度到以下方案,但是没有效果 最终解决: 在.pro文件中添加如下,重新构建运行即可显示中文内容 msvc:QMAKE_CXXFLAGS -exec…...
Go:接口
接口既约定 Go 语言中接口是抽象类型 ,与具体类型不同 ,不暴露数据布局、内部结构及基本操作 ,仅提供一些方法 ,拿到接口类型的值 ,只能知道它能做什么 ,即提供了哪些方法 。 func Fprintf(w io.Writer, …...
js | 网页上的 json 数据怎么保存到本地表格中?
1.思路 json 转为 csv 保存到本地或者:json 转为 html 显示到网页中,然后复制到excel中。 (2) 数据 wjl{"code":1,"data":[{"chrmiRNA":"chr1","0":"chr1","startmiRNA":&quo…...
智能Todo协作系统开发日志(二):架构优化与安全增强
📅 2025年4月14日 | 作者:Aphelios380 🌟 今日优化目标 在原Todo单机版基础上进行三大核心升级: 组件化架构改造 - 提升代码可维护性 本地数据加密存储 - 增强隐私安全性 无障碍访问支持 - 践行W3C标准 一、组件化架构改造 …...
buctoj_算法设计与分析(5)
问题 A: 没有上司的舞会 题目描述 Ural大学有N名职员,编号为1~N。 他们的关系就像一棵以校长为根的树,父节点就是子节点的直接上司。 每个职员有一个快乐指数,用整数 HiHi 给出,其中 1≤i≤N。 现在要召开一场周年庆宴会&#x…...
VUE项目中的package.json中的启动脚本
"scripts": {"dev": "vite","build:prod": "vite build","build:stage": "vite build --mode staging","preview": "vite preview"}vite build 和 vite build --mode staging 是 V…...
目标追踪数据标注
在将 YOLO(目标检测) 和 DeepSORT(目标追踪) 结合时,数据标注需要同时满足 检测 和 追踪 的需求。以下是具体的分阶段标注策略和操作指南: 一、标注的核心要求 检测标注:每帧中目标的 边界框&a…...
详细介绍7大排序算法
1.排序的概念及其运用 1.1 排序的概念 排序 :所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 稳定性 :假定在待排序的记录序列中,存在多个具有相同的关键字的记…...
TGCTF web
AAA偷渡阴平 这个题是一个非预期的无参RCE <?php$tgctf2025$_GET[tgctf2025];if(!preg_match("/0|1|[3-9]|\~|\|\|\#|\\$|\%|\^|\&|\*|\(|\)|\-|\|\|\{|\[|\]|\}|\:|\|\"|\,|\<|\.|\>|\/|\?|\\\\/i", $tgctf2025)){//hi…...
RTPS数据包分析
DDS-RTPS 常见子消息_dds pdp消息-CSDN博客Fast RTPS原理与代码分析(3):动态发现协议之端点发现协议EDP_fast-rtps 原理-CSDN博客 在RTPS(Real-Time Publish-Subscribe,实时发布订阅)协议中,DATA(r)和DATA是两种不同的…...
go语言gRPC使用流程
1. 安装工具和依赖 安装 Protocol Buffers 编译器 (protoc) 下载地址:https://github.com/protocolbuffers/protobuf/releases 使用说明:https://protobuf.dev/ 【centos环境】yum方式安装:protoc[rootlocalhost demo-first]# yum install …...
回溯算法的要点
可以用树结构(解空间树)来表示用回溯法解决的问题的所有选项。 叶节点则对应着最终的状态. 回溯过程:深度遍历,在任意时刻,算法只保存从根结点到当前结点的路径。 “剪枝”:当某一节点不包含问题的解&am…...
爬虫: 一文掌握 pycurl 的详细使用(更接近底层,性能更高)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、PycURL概述1.1 PycURL介绍1.2 基本安装1.3 安装依赖(Linux/macOS)1.4 常用选项参考二、基本使用2.1 简单 GET 请求2.2 获取响应信息2.3 设置请求头2.4 超时设置2.5 跟随重定向三、高级功能3.1 POST 请求3.2 文件上…...
大模型文生图
提示词分4个部分:质量,主体,元素,风格 质量:杰作,高质量,超细节,完美的精度,高分辨率,大师级的; 权重:把图片加括号,&am…...
c# AI编程助手 — Fitten Code
前言 前有Copilot各种酷炫操作,今有国产软件杀出重围。给大家介绍的是一款国内的国产编程神器,可与微软GitHub Copilot比比身手。关键它还是完全免费。它就是:非十团队国产自主研发的Fitten Code。此工具的速度是GitHub Copilot的两倍&#x…...
《植物大战僵尸融合版v2.4.1》,塔防与创新融合的完美碰撞
《植物大战僵尸融合版》是基于经典塔防游戏《植物大战僵尸》的创意同人改版,由“蓝飘飘fly”等开发者主导制作。它在保留原版核心玩法的基础上,引入了独特的植物融合机制,玩家可以将不同的植物进行组合,创造出全新的植物种类&…...
深度学习总结(12)
层:深度学习的基础模块 神经网络的基本数据结构是层。层是一个数据处理模块,它接收一个或多个张量作为输入,并输出一个或多个张量。有些层是无状态的,但大多数层具有状态,即层的权重。权重是利用随机梯度下降学到的一个或多个张量…...
pyqt环境配置
文章目录 1 概述2 PyQt6和PySide6区别3 环境配置4 配置PySide65 配置PyQt66 配置外部工具7 添加模板8 使用pyside6-project构建工程9 常见错误10 相关地址 更多精彩内容👉内容导航 👈👉Qt开发 👈👉python开发 …...
YOLO11改进——融合BAM注意力机制增强图像分类与目标检测能力
深度学习在计算机视觉领域的应用取得了显著进展,尤其是在目标检测(Object Detection)和图像分类(Image Classification)任务中。YOLO(You Only Look Once)系列算法凭借其高效的单阶段检测框架和…...
考研单词笔记 2025.04.14
amount n数量,数额v(数量)达到,总计(to),意味着,相当于 couple n一对,一双,一些,几个,夫妻,情侣v连接,结合 …...
AI云游戏盒子:未来娱乐的新纪元
AI云游戏盒子:未来娱乐的新纪元 随着科技的不断进步,人工智能(AI)与云计算技术的结合正在重新定义我们享受数字娱乐的方式。2025年,一款名为“AI云游戏盒子”的产品正逐渐成为家庭娱乐的核心设备,它不仅集…...
第八章 文件操作
第八章 文件操作 文章目录 第八章 文件操作1 文件读取1 将文件整个读取内存2 按字节读取文件 1 文件读取 1 将文件整个读取内存 类似于python的 with open(filename, modert, encodingutf-8) as f:res f.read()go中的书写方式: 方式一: package ma…...
《extern:如何在编译时“暗通款曲“》
C中extern关键字的完整用法总结 extern是C中管理链接性(linkage)的重要关键字,主要用于声明外部定义的变量或函数。以下是详细的用法分类和完整示例: 一、基本用法 1. 声明外部全局变量 // globals.cpp int g_globalVar 42; …...
活动图与流程图的区别与联系:深入理解两种建模工具
目录 前言1. 活动图概述1.1 活动图的定义1.2 活动图的基本构成要素1.3 活动图的应用场景 2. 流程图概述2.1 流程图的定义2.2 流程图的基本构成要素2.3 流程图的应用场景 3. 活动图与流程图的联系4. 活动图与流程图的区别4.1 所属体系不同4.2 表达能力差异4.3 使用目的与语境4.4…...
FinanceRAG获奖方案解读:ACM-ICAIF ’24的FinanceRAG挑战赛
ACM-ICAIF 24 FinanceRAG Challenge提供一套整合的文本和表格财务数据集。这些数据集旨在测试系统检索和推理财务数据的能力。参与者将受益于 Github 上的基线示例和官方提交代码,其位于FinanceRAG,以及在 huggingface 上的简化的数据集访问,…...
Linux LED驱动(gpio子系统)
0. gpio子系统 gpio子系统是linux内核当中用于管理GPIO资源的一套系统,它提供了很多GPIO相关的API接口,驱动程序中使用GPIO之前需要向gpio子系统申请。 gpio子系统的主要目的就是方便驱动开发者使用gpio,驱动开发者在设备树中添加gpio相关信息…...
场外期权交易和结算方式的区别是什么?
场外期权交易的核心在于双方协商一致的合约条款。这些条款包括但不限于期权的类型(看涨或看跌)、执行价格、到期日、合约规模以及支付的期权费。由于每份合约都是独一无二的,因此交易双方需要具备高度的专业知识和谈判技巧,下文为…...
自注意力的机制内涵和设计逻辑
在自注意力机制中,查询(Q)、键(K)和值(V)的交互过程是核心设计,其背后的数学和语义内涵可以从以下角度理解: 1. 数学视角:动态加权聚合 自注意力机制的公式可…...
VIM学习笔记
1. ex模式 vim中,按:触发的命令行模式,称为 ex模式,具体命令参见如下笔记: https://blog.csdn.net/u010250151/article/details/51868751?ops_request_misc%257B%2522request%255Fid%2522%253A%2522814b671a9898c95…...