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

Android的日志工具Log

文章目录

  • Android的日志工具Log
    • Log打印日志的5个方法
    • Log快捷输入
    • logcat中添加过滤器
    • logcat中的日志级别控制
    • 关键字过滤

Android的日志工具Log

Log打印日志的5个方法

Android中的日志工具类是Log(android.util.Log),这个类中提供了如下5个方法来供我们打印日志。

  • Log.v()。用于打印那些最为琐碎的、意义最小的日志信息。对应级别verbose,是Android日志里面级别最低的一种。
  • Log.d()。用于打印一些调试信息,这些信息对你调试程序和分析问题应该是有帮助的。对应级别debug,比verbose高一级。
  • Log.i()。用于打印一些比较重要的数据,这些数据应该是你非常想看到的、可以帮你分析用户行为数据。对应级别info,比debug高一级。
  • Log.w()。用于打印一些警告信息,提示程序在这个地方可能会有潜在的风险,最好去修复一下这些出现警告的地方。对应级别warn,比info高一级。
  • Log.e()。用于打印程序中的错误信息,比如程序进入到了catch语句当中。当有错误信息打印出来的时候,一般都代表你的程序出现严重问题了,必须尽快修复。对应级别error,比warn高一级。

其实很简单,一共就5个方法,当然每个方法还会有不同的重载,但那对你来说肯定不是什么难理解的地方了。我们现在就在HelloWorld项目中试一试日志工具好不好用吧。

打开HelloWorldActivity,在onCreate()方法中添加一行打印日志的语句,如下所示:

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.hello_world_layout);
Log.d("HelloWorldActivity", "onCreate execute");
}

**Log.d()方法中传入了两个参数:第一个参数是tag,一般传入当前的类名就好,主要用于对打印信息进行过滤;第二个参数是msg,即想要打印的具体的内容。**现在可以重新运行一下HelloWorld这个项目了,点击顶部工具栏上的运行按钮,等程序运行完毕,点击Android Studio底部工具栏的Android Monitor,在logcat中就可以看到打印信息了,如图所示:

在这里插入图片描述

logcat中的打印信息,其中,你不仅可以看到打印日志的内容和tag名,就连程序的包名、打印的时间以及应用程序的进程号都可以看到。

Log快捷输入

Log快捷输入,在Android Studio当中也是有的,比如你想打印一条debug级别的日志,那么只需要输入logd,然后按下Tab键,就会帮你自动补全一条完整的打印语句。输入logi,然后按下Tab键,会自动补全一条info级别的打印日志。输入logw,按下Tab键,会自动补全一条warn级别的打印日志,以此类推。

另外,由于Log的所有打印方法都要求传入一个tag参数,每次写一遍显然太过麻烦。这里还有一个小技巧,我们在onCreate()方法的外面输入logt,然后按下Tab键,这时就会以当前的类名作为值自动生成一个TAG常量,如下所示:

public class HelloWorldActivity extends AppCompatActivity {
private static final String TAG = "HelloWorldActivity";
...
}

logcat中添加过滤器

除了快捷输入之外,logcat中还能很轻松地添加过滤器,你可以在下图中看到我们目前所有的过滤器。

在这里插入图片描述

logcat中的过滤器目前只有3个过滤器,Show only selected application表示只显示当前选中程序的日志, Firebase是谷歌提供的一个分析工具,我们可以不用管它,No Filters相当于没有过滤器,会把所有的日志都显示出来。那可不可以自定义过滤器呢?当然可以,我们现在就来添加一个过滤器试试。

点击图中的Edit Filter Configuration,会弹出一个过滤器配置界面。我们给过滤器起名叫data,并且让它对名为data的tag进行过滤,如图所示:

在这里插入图片描述

点击OK,你就会发现你已经多出了一个data过滤器。当你点击这个过滤器的时候,你会发现刚才在onCreate()方法里打印的日志没了,这是因为data这个过滤器只会显示tag名称为data的日志。你可以尝试在onCreate()方法中把打印日志的语句改成Log.d(“data”,“onCreate execute”),然后再次运行程序,你就会在data过滤器下看到这行日志了。

不知道你有没有体会到使用过滤器的好处,可能现在还没有吧。不过当你的程序打印出成百上千行日志的时候,你就会迫切地需要过滤器了。

logcat中的日志级别控制

看完了过滤器,再来看一下logcat中的日志级别控制吧。logcat中主要有5个级别,分别对应着上面介绍的5个方法,如图所示:

在这里插入图片描述

当前我们选中的级别是verbose,也就是最低等级。这意味着不管我们使用哪一个方法打印日志,这条日志都一定会显示出来。而如果我们将级别选中为debug,这时只有我们使用debug及以上级别方法打印的日志才会显示出来,以此类推。你可以做一下试验,当你把logcat中的级别选中为info、warn或者error时,我们在onCreate()方法中打印的语句是不会显示的,因为我们打印日志时使用的是Log.d()方法。(简而言之,高等级别可以显示低等级别的日志,反之不可以

日志级别控制的好处就是,你可以很快地找到你所关心的那些日志。相信如果让你从上千行日志中查找一条崩溃信息,你一定会抓狂的吧。而现在你只需要将日志级别选中为error,那些不相干的琐碎信息就不会再干扰你的视线了。

关键字过滤

最后我们再来看一下关键字过滤。如果使用过滤器加日志级别控制还是不能锁定到你想查看的日志内容的话,那么还可以通过关键字进行进一步的过滤,如图所示:

在这里插入图片描述

我们可以在输入框里输入关键字的内容,这样只有符合关键字条件的日志才会显示出来,从而能够快速定位到任何你想查看的日志。另外还有一点需要注意,关键字过滤是支持正则表达式的,有了这个特性,我们就可以构建出更加丰富的过滤条件。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 负载均衡---相关概念介绍(一)
  • 华为AR1220配置GRE隧道
  • 国外有哪些好用的AI工具?
  • 【MySQL】索引和事务
  • SQLite 创建表
  • Linux | Linux开发工具链全攻略:yum、vim、gcc/g++、GDB、Makefile与git版本控制
  • 解密!抖音百万粉丝博主三维地图视频都用到了什么GIS数据和技术
  • c++----简单了解string
  • 利用keepalived达成服务高可用
  • Git使用方法(二)---常用命令-半小时学会git
  • rust 编译时报错:type annotations needed for Box
  • ant design pro v6 如何做好角色管理
  • FastAPI部署大模型Llama 3.1
  • STM32标准库学习笔记-6.定时器-输入捕获
  • final
  • [ JavaScript ] 数据结构与算法 —— 链表
  • Consul Config 使用Git做版本控制的实现
  • Java,console输出实时的转向GUI textbox
  • JS+CSS实现数字滚动
  • Laravel 菜鸟晋级之路
  • leetcode98. Validate Binary Search Tree
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • React 快速上手 - 07 前端路由 react-router
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • 从伪并行的 Python 多线程说起
  • 大数据与云计算学习:数据分析(二)
  • 观察者模式实现非直接耦合
  • ------- 计算机网络基础
  • 聊聊hikari连接池的leakDetectionThreshold
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • Nginx实现动静分离
  • 如何正确理解,内页权重高于首页?
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • #13 yum、编译安装与sed命令的使用
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (1)(1.8) MSP(MultiWii 串行协议)(4.1 版)
  • (2)Java 简介
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (Ruby)Ubuntu12.04安装Rails环境
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (已解决)什么是vue导航守卫
  • (转)平衡树
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .net 调用海康SDK以及常见的坑解释
  • .NET框架
  • .NET企业级应用架构设计系列之技术选型
  • .Net转Java自学之路—SpringMVC框架篇六(异常处理)
  • ?php echo ?,?php echo Hello world!;?
  • @ 代码随想录算法训练营第8周(C语言)|Day53(动态规划)
  • @configuration注解_2w字长文给你讲透了配置类为什么要添加 @Configuration注解
  • @Controller和@RestController的区别?