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

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. 日志级别

级别方法说明
VERBOSELog.v()最详细日志,开发调试使用
DEBUGLog.d()调试信息,发布时应移除
INFOLog.i()重要运行信息
WARNLog.w()潜在问题警告
ERRORLog.e()错误信息,但不影响应用继续运行
ASSERTLog.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 界面组成

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. 设备选择下拉框:选择要查看日志的设备
  2. 应用选择下拉框:选择要查看的应用进程
  3. 日志级别筛选:可按级别过滤日志
  4. 搜索框:可按关键字搜索日志
  5. 日志显示区域:显示日志内容
  6. 日志配置菜单:自定义日志显示格式

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. 保存日志到文件

  1. 点击 Logcat 工具栏的 “Export” 按钮
  2. 选择保存位置和文件名
  3. 可以选择保存当前显示的日志或完整日志

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");
}

五、日志最佳实践

  1. 标签命名规范

    • 使用类名作为标签:private static final String TAG = MainActivity.class.getSimpleName();
    • 保持标签简洁明了
  2. 日志内容规范

    • 包含足够上下文信息
    • 避免记录敏感信息(如密码、token等)
    • 生产环境移除调试日志
  3. 性能考虑

    • 避免在循环中记录大量日志
    • 字符串拼接使用 StringBuilder
  4. 发布应用处理

    • 使用 ProGuard 移除调试日志
    • 或使用日志工具类控制日志输出
if (BuildConfig.DEBUG) {// 调试日志
}

六、常见问题解决

  1. Logcat 不显示日志

    • 检查设备是否连接
    • 检查是否选择了正确的应用进程
    • 尝试重启 ADB:adb kill-server && adb start-server
  2. 日志太多难以查找

    • 使用过滤器
    • 添加唯一标识符到你的日志
    • 使用 package:mine 只看当前应用日志
  3. 日志丢失或不全

    • 增加日志缓冲区大小:adb logcat -G 4M
    • 及时保存重要日志
  4. 性能分析日志

    • 使用 adb shell dumpsys 获取系统信息
    • 使用 Android Profiler 进行性能分析

七、替代日志方案

  1. Timber:流行的日志库,提供更简洁的API

    Timber.d("Debug message with %s", argument);
    
  2. Logger:美观的日志格式化库

    Logger.d("Hello %s", "World");
    
  3. Crashlytics:崩溃日志收集

    FirebaseCrashlytics.getInstance().log("Important event");
    
  4. 自定义日志系统:将日志发送到服务器进行分析

通过合理使用 Android Studio 的日志功能,可以大大提高开发效率和问题排查能力。建议根据项目需求建立统一的日志规范,并在团队中贯彻执行。

相关文章:

Android Studio 日志系统详解

文章目录 一、Android 日志系统基础1. Log 类2. 日志级别 二、Android Studio 中的 Logcat1. 打开 Logcat2. Logcat 界面组成3. 常用 Logcat 命令 三、高级日志技巧1. 自定义日志工具类2. 打印方法调用栈3. 打印长日志4. JSON 和 XML 格式化输出 四、Logcat 高级功能1. 自定义日…...

基于matlab的D2D 功率控制仿真

基于MATLAB的D2D(Device-to-Device)功率控制仿真示例,包含系统建模、功率控制算法实现和性能分析。该仿真以蜂窝网络为背景,重点关注D2D用户间的干扰管理和功率优化。 1. 系统模型与参数设置​ clc; clear; close all;%% 参数配置…...

互联网大厂Java面试:从基础到复杂场景的技术挑战

互联网大厂Java面试:从基础到复杂场景的技术挑战 场景描述 在一家知名互联网大厂的会议室里,面试官严肃地坐在桌子的一侧,而对面则是一位充满喜感的应聘者——谢飞机。面试官准备了一系列关于Java技术栈的提问,涵盖了从基础到复…...

使用Redission来实现布隆过滤器

简述布隆过滤器 布隆过滤器是一种概率型数据结构,它可以用来判断一个元素是否在一个集合中。我们当时使用的是Redisson实现的布隆过滤器。它的底层原理是,先初始化一个比较大的数组,里面存放的是二进制0或1。一开始都是0,当一个k…...

为 Windows 和 Ubuntu 中设定代理服务器的详细方法

有时下载大模型总是下载不出来,要配置代理才行 一、Windows代理设置 ① 系统全局代理设置 打开【设置】→【网络和Internet】→【代理】。 在【手动设置代理】下,打开开关,输入: 地址:10.10.10.215 端口:…...

Feign异步模式丢失上下文问题

Feign异步模式丢失上下文问题 问题描述 当我们使用异步对我们代码进行操作优化时,代码中使用了RequestContextHolder去获取上下文的数据,当我们执行原来可以执行的业务时发现报了空指针异常或数据为空,这是为什么呢? 原理解释 …...

OpenCV阈值处理完全指南:从基础到高级应用

引言 阈值处理是图像处理中最基础、最常用的技术之一,它能够将灰度图像转换为二值图像,为后续的图像分析和处理奠定基础。本文将全面介绍OpenCV中的各种阈值处理方法,包括原理讲解、代码实现和实际应用场景。 一、什么是阈值处理&#xff1…...

【AWS入门】Amazon SageMaker简介

【AWS入门】Amazon SageMaker简介 [AWS Essentials] Brief Introduction to Amazon SageMaker By JacksonML 机器学习(Machine Learning,简称ML) 是当代流行的计算机科学分支技术。通常,人们在本地部署搭建环境,以满足机器学习的要求。 AWS…...

ArcGIS Pro 3.4 二次开发 - 内容

环境:ArcGIS Pro SDK 3.4 .NET 8 文章目录 内容1 工程1.1 创建一个空工程1.2 使用指定名称创建新工程1.3 使用Pro的默认设置创建新工程1.4 使用自定义模板文件创建新工程1.5 使用 ArcGIS Pro 提供的模板创建工程1.6 打开现有工程1.7 获取当前工程1.8 获取当前工程的…...

如何在 MongoDB 中设计文档结构?与关系型数据库的表结构设计有何不同?

在 MongoDB 中设计文档结构是一个核心且重要的环节,它直接影响应用的性能、可扩展性和可维护性。 MongoDB 文档结构设计原则与方法 MongoDB 的核心思想是数据如何被应用访问,就如何存储它。 嵌入 (Embedding / Denormalization) vs. 引用 (Referencing…...

MYSQL 故障排查与生产环境优化

目录 一.前置知识点 1. 案例需求 (1)mysql 常见故障解决 (2)mysql 性能优化 2.案例实施思路 (1)单库常见故障分析 (2)主从常见故障分析 (3)从几个不同…...

解决使用@JsonFormat(pattern = “yyyy-MM-dd HH:mm:ss“, timezone = “GMT+8“)时区转换无效的问题

前言 对于一些时间的字段,我们从数据库查询出来通常需要转换后返回给前端展示,前端需要的格式一般为yyyy-MM-dd HH:mm:ss,可以通过JsonFormat注解来作转换和时区转换。 问题场景 原因 LocalDateTime类本身不带时区信息所以转换无效 解决办…...

计算机网络概要

⽹络相关基础知识 协议 两设备之间使⽤光电信号传输信息数据 要想传递不同信息 那么⼆者ᳵ就需要约定好的数据格式 层 封装 继承 多态是计算机的性质 它们⽀持了软硬件分层的实现 同层协议可以ᳵ接通信 同层协议ᳵ不直接通信 是各⾃调⽤下层提供的结构能⼒完成通信 分层…...

Word压缩解决方案

Word压缩解决方案:基于图片压缩的 .docx 优化实践 📌 背景 在日常科研写作或项目文档整理中,Word 文档(.docx)往往因为插入大量高清图表、扫描图像、公式图等导致文件体积过大,或者毕业学位论文查重要求上…...

Spring Boot开发—— 整合Lucene构建轻量级毫秒级响应的全文检索引擎

文章目录 一、为什么选择 Lucene?轻量级搜索的底层密码二、核心原理:Lucene 的倒排索引2.1 倒排索引:速度之源2.2 段合并优化策略三、Spring Boot集成Lucene实战3.1 依赖配置3.2 实体与索引设计3.3 核心索引服务(含异常处理)3.4 使用示例(测试类)四、高级优化技巧4.1 索…...

TDengine 2025年产品路线图

TDengine OSS 之 2025 年年度路线图如下表所示。 季度功能2025Q1 虚拟表查询能力:REGEXP、GREATEST、LEAST、CAST 函数支持判断表达式、单行选择函数的其他列值、INTERP 支持插值时间范围存储能力:支持将查询结果写入超级表、超级表支持 KEEP 参数、STM…...

vue3中element-plus修改el-tooltip的宽度

注意选中的样式是 :deep(.el-popper .is-dark){max-width:30% !important; } 也有可能不需要后面的 .is-dark,看情况而定,总之不是.el-tooltip 修改el-tooltip的显示高度参考:前端字数太多使用el-table设置show-overflow-tooltip显示不下&a…...

Ubuntu服务器部署多语言项目(Node.js/Python)方式实践

Ubuntu服务器部署多语言项目(Node.js/Python)方式实践 服务器脚本运行方式命令行直接执行nohup后台执行进程 Screen概述安装基本操作命令启动 Screen退出当前会话(不终止进程)查看所有会话重连会话关闭会话 常用快捷键典型使用场景…...

计算机网络 - 2.基础协议

1.TCP协议 1.TCP(Transmission Control Protocol):传输控制协议2.TCP协议是一种面向连接的、可靠的、 基于字节流的传输层通信协议 1.面向连接:两个使用TCP协议的应用(通常一个客户和一个服务器)在彼此交换数据包之前必须先建立一个TCP连接2.可靠的 1.数据传输之前都要建立…...

Kafka消息路由分区机制深度解析:架构设计与实现原理

一、消息路由系统的核心架构哲学 1.1 分布式系统的三元悖论 在分布式消息系统的设计过程中,架构师需要平衡三个核心诉求:数据一致性、系统可用性和分区容忍性。Kafka的分区路由机制本质上是对CAP定理的实践解: 一致性维度:通过…...

机器学习中采样哪些事

在机器学习中采样主要分为两种,过采样(Oversample)和欠采样(Undersample)。过采样就是通过增加少数类样本的数量来平衡数据集。而欠采样就是通过减少多数类样本的数量来平衡数据集。 通常在进行采样中以下是几种常用的方法: 1. 随机采样 随…...

初识css,css语法怎样学好css以及常见问题与避坑

一、CSS 是什么? CSS(Cascading Style Sheets)是一种用于描述网页文档(HTML 或 XML)呈现样式的语言。它负责控制网页元素的视觉表现,如颜色、字体、布局等,使内容与展示分离。 二、CSS 语法结构…...

MySQL如何快速删除数据库中所有表数据

首先运行下面指令生成TRUNCATE TABLE语句 -- 生成的TRUNCATE TABLE语句 SELECT CONCAT(TRUNCATE TABLE , table_name, ;) FROM information_schema.tables WHERE table_schema axe_elder; 再运行下面指令禁用外键关联检查 -- 禁用外键检查 SET FOREIGN_KEY_CHECKS 0; 运…...

计算机视觉与深度学习 | Python实现ARIMA-LSTM时间序列预测(完整源码和数据)

ARIMA-LSTM混合模型 1. 环境准备2. 数据生成(示例数据)3. 数据预处理4. ARIMA建模5. LSTM残差建模6. 混合预测7. 结果可视化完整代码说明1. **数据生成**2. **ARIMA建模**3. **LSTM残差建模**4. **混合预测**5. **性能评估**参数调优建议扩展方向典型输出以下是使用Python实现…...

Axure疑难杂症:垂直菜单展开与收回(4大核心问题与专家级解决方案)

亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢!如有帮助请订阅专栏! Axure产品经理精品视频课已登录CSDN可点击学习https://edu.csdn.net/course/detail/40420 课程主题:垂直菜单展开与收回 主要内容:超长菜单实现、展开与收回bug解释、Axure9版本限制等问题解…...

vue2.0 组件生命周期

个人简介 👨‍💻‍个人主页: 魔术师 📖学习方向: 主攻前端方向,正逐渐往全栈发展 🚴个人状态: 研发工程师,现效力于政务服务网事业 🇨🇳人生格言&…...

从零开始创建一个 Next.js 项目并实现一个 TodoList 示例

Next.js 是一个基于 React 的服务端渲染框架,它提供了很多开箱即用的功能,如自动路由、API 路由、静态生成、增量静态再生等。本文将带你一步步创建一个 Next.js 项目,并实现一个简单的 TodoList 功能。 效果地址 🧱 安装 Next.j…...

在Linux服务器上部署Jupyter Notebook并实现ssh无密码远程访问

Jupyter notebook版本7.4.2(这个版本AI提示我Jupyter7(底层是 jupyter_server 2.x) 服务器开启服务 安装Jupyter notebook 7.4.2成功后,终端输入 jupyter notebook --generate-config 这将在 ~/.jupyter/ 目录下生成 jupyter_…...

GPU 超级节点:AWS Trainium2 UltraServer

目录 文章目录 目录时间线Inferentia1Trainium1Inferentia2Trainium2Trainium2 ServerTrainium2 UltraServerTrainium2 UltraClustersTrainium3AWS GPU 实例矩阵与竞品分析SuperNode RackTrn2 ServerTrn2U Server ScaleUp 网络PCIe Gen5:CPU-Trainium2 ScaleUpNeuro…...

代码随想录算法训练营Day37 | 完全背包基础理论 518. 零钱兑换II 377. 组合总和Ⅳ 57. 爬楼梯(第八期模拟笔试)

完全背包基础理论 不放物品i:背包容量为j,里面不放物品i的最大价值是dp[i - 1][j]。 放物品i:背包空出物品i的容量后,背包容量为j - weight[i],dp[i][j - weight[i]] 为背包容量为j - weight[i]且不放物品i的最大价值…...