Android 日志介绍
作业: 在成功创建软件的基础上,verbose(细节) ,debug(调试) ,info(信息),warn(警告),error(错误) 等不同类型的输出。
Android 采用Log工具打印日志,它将各类日志划分为五个等级:
-
Log.e: 表示错误信息,比如可能导致程序崩溃的异常
-
Log.w: 表示警告信息。
-
Log.i: 表示一般信息。
-
Log.d 表示调试信息,可把程序运行时的变量值打印出来,方便跟踪调试。
-
Log.v 表示冗余信息。
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.e("error","错误"); Log.w("warn","警告"); Log.i("message","信息"); Log.d("debug","调试信息"); Log.v("verbose","细节"); } }
一、Log基本介绍
Logcat是Android日常开发过程中的重要组成部分。Logcat上会显示系统消息、使用Log类添加到应用的消息、应用运行异常信息等,通过日志,我们可以实时监控应用运行状态,为应用调试提供重要参考。
Log格式
一条标准的日志由以下几个部分组成:
格式:
date time PID-TID/package priority/tag: message
2023-02-22 23:46:19.145 11075-11104/com.example.sy1 W/Parcel: Expecting binder but got null!
date:日志输出时设备的日期。
time:日志输出时设备的时间,精确到毫秒。
PID:进程标识符。
TID:线程标识符,若进程中只存在一个线程,则PID与TID可以相同。
-
进程和线程的区别
Java 内存区域,我们从 JVM 的角度来说一下线程和进程之间的关系
从上图可以看出:一个进程中可以有多个线程,多个线程共享进程的堆和方法区 (JDK1.8 之后的元空间)资源,但是每个线程有自己的程序计数器、虚拟机栈 和 本地方法栈。 线程是进程划分成的更小的运行单位,一个进程在其执行的过程中可以产生多个线程。线程和进程最大的不同在于基本上各进程是独立的,而各线程则不一定,因为同一进程中的线程极有可能会相互影响。线程执行开销小,但不利于资源的管理和保护;而进程正相反。
package:输出该条日志的应用包名。
priority:日志优先级,取值如下,优先级从低到高排列:
tag:标签,用来标明日志发起者以及方便对日志进行过滤筛选。
message:日志的主体内容。
二、Log类介绍
android.util.Log是Android上用于发送日志输出的API。 Log类按照日志优先级,提供了以下最常用的5种方法:
(1)static int v(String tag, String msg)
该方法用于打印最为琐碎的、意义最小的日志信息,是Android日志级别最低的一种,其对应级别为:verbose。
(2)static int d(String tag, String msg)
该方法用于打印调试信息,可以在Release版本中关闭,比较常见,开发中经常选择输出此种级别的日志,有时在beta版应用中出现。对应级别为:debug。
(3)static int i(String tag, String msg)
该方法用于打印一些比较重要的数据,对应级别:info。该等级日志显示运行状态信息,可在产品出现问题时提供帮助,从该级别开始的日志通常包含完整意义的英语语句和调试信息,是最常见的日志级别。
(4)static int w(String tag, String msg)
该方法用于打印一些警告信息,表示运行出现异常即将发生错误或表明已发生非致命性错误,对应级别:warn。该级别日志通常显示出执行过程中的意外情况,例如将try-catch语句块中的异常打印堆栈轨迹之后可输出此种级别日志。
(5)static int e(String tag, String msg)
该方法用于打印程序中的错误信息,表示已经出现可影响运行的错误,比如应用crash时输出的日志,对应级别:error。
注:以上5种方法均存在一个重载方法,可用于输出异常信息及其堆栈轨迹。
static int v (String tag, String msg, Throwable tr);
static int d (String tag, String msg, Throwable tr);
static int i (String tag, String msg, Throwable tr);
static int w (String tag, String msg, Throwable tr);
static int e (String tag, String msg, Throwable tr);
(6)static String getStackTraceString(Throwable tr)
该方法可从Throwable获取到异常信息及其堆栈轨迹。
(7)static boolean isLoggable (String tag, int level)
该方法用于检查指定标签的日志是否能够在指定优先级进行输出。在Android系统上,任何标签的允许输出的默认优先级都是INFO,我们可以通过设置系统prop来控制指定标签允许输出的优先级,来控制isLoggable方法的返回结果,则我们可以通过该方法来控制指定日志的开关。
(8)static int wtf (String tag, String msg)
该方法用于报告一个永远不会发生的情况,“wtf"意为"what a terrible failure”,该错误将被记录在assert(中断)级别的log打印中,并可以根据系统配置发送错误报告,并立即终止程序。
Android studio logcat介绍
1、打开Logcat
通过单击Android Studio底部的Logcat工具栏按钮。
通过单击主菜单栏View > Tool Windows > Logcat。
Logcat 窗口会显示从窗口顶部菜单中选择的应用的日志消息,如图 1 所示。
图 1. Logcat 窗口。
Logcat 工具栏中提供以下按钮:
- Clear Logcat :点击此按钮可以清除显示的日志。
- Scroll to the end :点击此按钮可以跳转到日志底部并查看最新的日志消息。如果您先点击此按钮,然后点击日志中的某一行,则视图会在相应位置暂停滚动。
- Up the stack trace 和 Down the stack trace : 点击相应按钮可以在日志的堆栈轨迹中进行上下导航,从而选择输出的异常中显示的上一个或下一个文件名。这与您在日志中点击某个文件名时的行为相同。
- Use soft wraps :点击此按钮可以启用换行并防止水平滚动。不过,所有非间断字符串仍然需要进行水平滚动。
- Print :点击此按钮可以输出 Logcat 消息。在显示的对话框中选择输出偏好设置后,您还可以选择将消息保存为 PDF 格式。
- Restart :点击此按钮可以清除日志并重启 Logcat。与 Clear Logcat 按钮不同,此按钮可以恢复并显示之前的日志消息,因此当 Logcat 无响应而您又不想失去日志消息时,此按钮是最有用的。
- Logcat header :点击此按钮可以打开 Configure Logcat Header 对话框,在该对话框中,您可以自定义各个 Logcat 消息的外观,例如是否显示日期和时间。
- Screen capture :点击此按钮可以截取屏幕截图。
- Screen record :点击此按钮可以录制设备屏幕的视频(时长不超过 3 分钟)。
3、Logcat窗口上边栏说明
设备选择菜单,可以从下拉菜单中选择要查看日志的设备。
应用程序(进程)选择菜单,可以从中选择指定应用包名,来查看对应程序的日志。
日志优先级过滤项,选择显示指定优先级以及更高级别的日志。
字符串搜索框,在其中输入字符串,就能根据该字符串进行日志过滤,输出包含对应字符串的日志。
(可选)如果在搜索字符串时,想要使用正则表达式搜索模式,请选中Regex。
过滤器菜单。
Show only selected application:仅显示通过应用代码生成的消息(默认选项)。Logcat 使用正在运行的应用的 PID 来过滤日志消息。
Firebase:谷歌提供的一个分析工具。
No Filters:不应用过滤器。无论选择哪个进程,logcat都会显示设备中的所有日志消息。
Edit Filter Configuration:创建或修改自定义过滤器。例如,可以自定义创建一个过滤器,以同时查看两个应用中的日志消息。