当前位置:首页 » 安卓系统 » android的logcat

android的logcat

发布时间: 2023-09-14 04:09:44

㈠ android logcat抓取app日志

一.logcat抓log方法:adb logcat命令,可以加条件过滤

1.安装SDK(参考android sdk环境安装)

2.使用数据线链接手机,在手机助手的sdcard中建立一个1.log的文件或在抓日志时直接导出到电脑位置

3.程序运行cmd,进入到含有adb.exe目录

4.输入adb devices 查看设备是否连上

5.输入抓取命令:adb logcat -s *:E > /mmt/sdcard/1.log或logcat -s '*:E' >d:/1.log,

6.使用手机打开app操作崩溃一次(如果想中途停止按下ctrl+c)

7.查看日志抓取文件,分不清楚是那个时间段所造成的后果

8.加入命令:-v time 就会显示出时间

9.输入命令adb logcat -v time -s *:E > /mmt/sdcard/1.log(eg:adb logcat -v time -s appname:E>d:/1.log)

10.查看结果

ps:

adb logcat -v time -s appname:E>d:/1.log

-v 显示日志格式  -v time 以时间为显示格式

-s 默认过滤,不显示默认tag。系统把tag的默认过滤级别是设置为Verbos,tag需要显示。如果设置-S等同于*:V

appname:E 显示appname操作中优先级大于等于“error”的日志

二、log过滤--根据Log信息级别

• V-(verbose) -明细 (最低优先级) • D-(debug)-调试• I-(information)-信息• W-(warning)-警告• E-(error)-错误

• F — 严重错误• S — 无记载 (最高优先级,没有什么会被记载)

三、  

log过滤-

  log过滤器使用(  

adb logcat tag:priprity)

过滤器表达式的格式是tag:priority ... ,其中tag是标记(可以是具体的,*表示所有), priority是最小的优先级,可以是组合

adblogcat ActivityManager:I MyApp:D *:S

adblogcat * :W -----所有优先级大于等于“warning”的日志

adblogcat * :E -----所有优先级大于等于“error”的日志

四、log输出-log控制日志格式 adb logcat -v 格式

brief — 显示优先级/标记和原始进程的PID (默认格式)

process — 仅显示进程PIDtag — 仅显示优先级/标记

thread — 仅显示进程:线程和优先级/标记

raw — 显示原始的日志信息,没有其他的元数据字段

time — 显示日期,调用时间,优先级/标记,PID

long —显示所有的元数据字段并且用空行分隔消息内容

eg:adb logcat -v thread

五.log输出-附加缓冲区:adb logcat -b 

radio — 查看包含在无线/电话相关的缓冲区消息

events — 查看事件相关的消息

main — 查看主缓冲区 (默认缓冲区)

adb logcat -b  radio

什么也不加代表默认缓冲

六.log输出-log选项列表

-b  指定要查看的日志缓冲区,可以是system,events ,radio,main . 默认值是system和main 。

-c 清楚屏幕上的日志. 

-d 输出日志到屏幕上. 

-f  指定输出日志信息的,默认是stdout . 

-g 输出指定的日志缓冲区,输出后退出. 

-n  设置日志的最大数目.,默认值是4,需要和 -r 选项一起使用。 

-r  每时输出日志,默认值为16,需要和-f 选项一起使用. 

-s 设置默认的过滤级别为silent. 

-v  设置日志输入格式

㈡ Android 日志系统分析(三):logcat

logcat 作为读取日志的工具,相当于client 的角色;在前两篇文章中,关于 logcat 如何与其他部分沟通获取日志信息的流程已经介绍的比较清晰,本文不在赘述,转而归纳一下 logcat 的一些常用指令,并对其中一些做详细分析

Android 日志系统为日志消息保留了多个环形缓冲区,但并非多有的日志消息都会发送到默认的环形缓冲区。这里可以采用 logcat -b 命令查看设备的其他缓冲区:

如果需要查看内核空间日志信息,可采用如下几种方式查看:

1、读取 /proc/kmsg ,命令如下

读取/proc/kmsg属于消费型读取,读取之后再次读取不会显示已经读取过的日志信息

2、读取 /dev/kmsg ,命令如下

读取/dev/kmsg会显示缓存区里面的所有日志信息。新写入的日志信息会不断累加到日志缓冲器中

3、使用 dmesg 命令读取

dmesg命令读取一次只显示一部分日志,非阻塞执行

使用 -v 命令来修改 log 的输出格式,以显示特定的元数据字段:

优先级:

logcat -f 命令可以将日志消息输出到指定的文件中。这里我们需要确定的一件事是 logcat 作为客户端的角色,会将通过 liblog 获得的日志信息进行格式解析、格式化处理,而 liblog 库本身并不存在保存、解析的功能。这里来对 -f 指令做一下解析:

_logcat() 函数中解析 -f 指令,设置日志输出文件。例如 logcat -f sdcard/log.txt ,则 context->outputFileName 赋值为 sdcard/log.txt

printBinary() 函数为例:

logcat.cpp # printBinary() :

[ 1 ] Android物语:logcat
[ 2 ] android调试——logcat详解
[ 3 ] 玩转Android10源码开发定制(12)内核篇之logcat输出内核日志

㈢ 在Android开发中,Logcat是什么

最后介绍一下Android的Log工具LogCat。
首先在Eclipse中选择Windows > Show View > Other... > Android > LogCat,确定后会出现LogCat显示框,用户添加的Log将会在这里显示。使用时直接在代码中插入“Log.i("info","this is a log");”,那么在执行到该语句时,LogCat显示框中将出现“this is a log”。

在Eclipse中安装ADT和android sdk包之后,运行以开发的android程序时,在LogCat窗口中会显示出一系列的信息,这些信息是每一个程序通过Dalvik虚拟机所传出的实时信息,可以方便我们对程序的了解。
在log窗口中,每条信息都包含五个部分,Time,标题空白,pid,tag和Message。
1、Time
表示执行的时间,这个信息对于学习生命周期,分析程序运行的先后顺序特别有用。
2、标题空白的列

表示的是信息的种类,分为V,D,I,W,E五种。
V:verbose,显示全部信息
D:Debug,显示调试信息
I:Info,显示一般信息
W:Warming,显示警告信息
E:Error,显示错误信息
可以通过点击LogCat上面的用圆圈括起来的V,D,I,W,E来改变显示的范围。比如选择了W,那就只有警告信息和错误信息可以显示出来了。
3、pid
表示程序运行时的进程号
4、tag
标签,通常表示系统中的一些进程名,比如我们运行helloworld程序的话,就会看到activitymanager在运行。
5、Message
表示进程运行时的一些具体信息,比如我们运行helloworld程序的话,就会看到starting activity...helloWorld的字样
可以输出LogCat的信息到文本文件中,以方便分析。在下拉框中选择输出选择的信息就可以了。
下面是输出到文件中的启动helloWorld程序时的一条信息的例子,分别用5个下划线标出了上面介绍的内容:
05-20 15:46:10.129: INFO/ActivityManager(60): Starting activity: Intent { act=android.intent.action.MAIN cat=
[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.example.android.helloworld/.HelloWorld }
6、Filter的使用
可以在Filter中输入筛选信息,使LogCat中只现实我们需要分析的信息。比如我们只想看和HelloWorld相关的信息,就可以在
Filter中输入HelloWorld,这样只有Message 中包含HelloWorld的内容才会显示出来。
7、LogCat中信息不能显示
上面说了这么多关于logCat的使用,可能LogCat中根本就什么信息都没有显示!没关系,只要在Eclipse中选择window-
>show view->other->android->devices就可以 了。
8、在LogCat中输出程序的运行信息

a、在程序中导入相应的包:import android.util.Log;
b、在需要输出信息的函数中增加相关的调试代码:Log.i("hi world","oncreate");
方法i是Log类的静态方法,可以直接使用,我们看着各类的定义可以看到,它提供了多种输出方法,分别对应我们上面提到的V,D,I,W,E。用哪个方法就决定了输出的类型,这里用i,表示输出的是information。
这个方法中的第一个参数就是要显示在Tag那一栏的内容,把这条语句加到OnCreate方法中,执行时LogCat中就会显示如下的信息: 05-22 21:58:22.894 I 3910 hi world onCreate
9、创建新的Filter

有时候只想看我们程序中用Log类的相关方法输出的各种信息,这时就可以考虑新建一个过滤器。点击LogCat的右上角的“+”号,可以创建一个新的过滤器。比如我们在by Log Tag的选项中填入上面程序输出的"hi world"这个tag。这样再运行时在我们新创建的Filter中就只显示hi world这个tag标记出来的信息了。

Android开发中的logcat工具使用详解--------

logcat是Android中一个命令行工具,可以用于得到程序的log信息。
logcat使用方法如下所示:
logcat [options] [filterspecs]
logcat的选项包括:
-s 设置过滤器,例如指定 '*:s'
-f <filename> 输出到文件,默认情况是标准输出。
-r [<kbytes>] Rotate log every kbytes. (16 if unspecified). Requires -f
-n <count> Sets max number of rotated logs to <count>, default 4
-v <format> 设置log的打印格式, <format> 是下面的一种:
brief process tag thread raw time threadtime long

-c 清除所有log并退出
-d 得到所有log并退出 (不阻塞)
-g 得到环形缓冲区的大小并退出
-b <buffer> 请求不同的环形缓冲区 ('main' (默认), 'radio', 'events')
-B 输出log到二进制中。

过滤器的格式是一个这样的串:
<tag>[:priority]

其中 <tag> 表示log的component, tag (或者使用 * 表示所有) , priority 如下所示:

V Verbose
D Debug
I Info
W Warn
E Error
F Fatal
S Silent

事实上logcat的功能 是由Android的类android.util.Log决定的,在程序中log的使用方法如下所示:
Log.v() -------------------- VERBOSE
Log.d() -------------------- DEBUG
Log.i() -------------------- INFO
Log.w() -------------------- WARN
Log.e() -------------------- ERROR
以上log的级别依次升高,DEBUG信息应当只存在于开发中,INFO, WARN,ERROR这三种log将出现在发布版本中。

对于JAVA类,可以声明一个字符串常量TAG,Logcat可以根据他来区分不同的log,例如在计算器(Calculator)的类中,定义如下所示:

public class Calculator extends Activity {
/* ...... */
private static final String LOG_TAG = "Calculator";
private static final boolean DEBUG = false;
private static final boolean LOG_ENABLED = DEBUG ? Config.LOGD : Config.LOGV;
/* ...... */
由此,所有在Calculator中使用的log,均以"Calculator"为开头。

例如使用方法如下所示:
# logcat &
< 得到一个log片段 >
W/KeyCharacterMap( 130): No keyboard for id 0
W/KeyCharacterMap( 130): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
I/ActivityManager( 52): Displayed activity com.android.contacts/.: 983 ms
I/ARMAsse mbler( 52): generated scanline__00000077:03545404_00000A04_00000000 [ 29 ipp] (51 ins) at [0x25c978:0x25ca44] in 1764174 ns
I/ARMAssembler( 52): generated scanline__00000077:03515104_00000001_00000000 [ 46 ipp] (65 ins) at [0x25d1c8:0x25d2cc] in 776789 ns
D / dalvikvm ( 130 ): GC freed 834 objects / 81760 bytes in 63ms
D/dalvikvm( 52): GC freed 10588 objects / 425776 bytes in 94ms

其中W/I/D 表示log的级别,“dalvikvm ”“ARMAssembler ”等是不同组件(component)的名称,后面括号里面的数字 表示了发出log的进程号。

使用技巧:
1.使用logcat &在后台运行
2.使用-d得到所有log
3.使用-f或者重定向(>和>>)输出到文件
4.使用-s设置过滤器,得到想要的log。

当然,最重要的还是在程序中加入恰当的log.

许多初次接触Android开发的朋友会遇到调试的问题,如何能够根据错误提示迅速的找到“出事地点呢”?在Eclipse+ADT的开发环境中没有好的直接跟踪对象内容的方法,通过使用android.util.Log类可以帮助你自己查找错误和打印系统日志消息。它是一个进行日志输出的API,我们在Android 程序中可以随时为某一个对象插入一个Log,然后在DDMS中观察Logcat的输出是否正常。
android.util.Log常用的方法有以下5个:Log.v() Log.d() Log.i() Log.w() 以及 Log.e() 。根据首字母对应VERBOSE,DEBUG,INFO, WARN,ERROR。当我们在DDMS进行调试时他们的区别并不大,只是显示的颜色不同,但通过Logcat的过滤器我们可以过滤显示某类的,一般对于执行错误的断点,下在Log.e比较合适。但是Android开发网根据规范建议VERBOSE,DEBUG信息应当只存在于开发中,最终版本只可以包含 INFO, WARN,ERROR这三种日志信息。在实际使用中,我们最好为每一个类声明一个字符串常量TAG,这样在Logcat中我们可以容易区分不同的类的日志。例如:
private static final String TAG = "MyActivity";
接下来我们就可以用Log随心所欲的观察Android代码中的每个细节:Log.e(TAG, "android123.com.cn"); 但是要记住这个Log类的参数都是String类型的。

㈣ Android中如何通过logcat追踪生命周期事件

Log类是Android.util的成员类,当我们键入Log类时,会弹出一个智能代码提示列表。我们在该列表中选择日志输出类型d的方法时,系统会自动import导入Android.util.Log包。但是要注意Log类值在实际开发中只用于测试代码,如果你准备进行应用分发时,你应该在代码中注释掉或者删除所有Log类的引用。Log类中封装了一套方法可以将消息发送到logcat控制台、命令行或者Andorid studio中,这些方法都是由单个字符组成,常用的方法有以下5个:Log.v() ,Log.d() ,Log.i() ,Log.w() ,Log.e() 。根据首字母对应VERBOSE,DEBUG,INFO, WARN,ERROR,分别表示不同的调式级别。在logcat控制台中你可以设置只显示某个级别及其以上的日志信息。

按照日志级别从高到低为ERROR, WARN, INFO, DEBUG, VERBOSE..
1、Log.v 字符串的输出颜色为黑色的,输出大于或等于VERBOSE日志级别的信息
2、Log.d字符串的输出颜色是蓝色的,输出大于或等于DEBUG日志级别的信息
3、Log.i字符串的输出为绿色,输出大于或等于INFO日志级别的信息
4、Log.w字符串的输出为橙色, 输出大于或等于WARN日志级别的信息
5、Log.e字符串的的输出为红色,仅输出ERROR日志级别的信息.

那我们如何通过Log类监听Activity的生命周期呢看
首先我们在Activity中重写所有生命周期相关的回调方法,然后在每个回调方法中通过Log类来调用相应的方法来打印信息。根据打印的信息我们就可以知道Activity的生命周期顺序时怎么样的了,以下示例代码我们监听了Activity所有生命周期相关的回调方法。在我们运行程序时就可以在控制台看到生命周期顺序的打印信息了。
package com.example.hsport.catalog;

import android.os.Bundle;
import android.support.design.widget.CoordinatorLayout;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

private CoordinatorLayout coordinatorLayout;
private final String TAG ="--MainActivity--";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
coordinatorLayout = (CoordinatorLayout) findViewById(R.id.coordinator);
Button button = (Button) findViewById(R.id.submitbutton);
Log.d(TAG,"--onCreate--");
}

@Override
protected void onStop() {
super.onStop();
Log.d(TAG,"--onStop--");
}

@Override
protected void onDestroy() {
super.onDestroy();
Log.d(TAG,"--onDestroy--");
}

@Override
protected void onPause() {
super.onPause();
Log.d(TAG,"-- onPause--");
}

@Override
protected void onResume() {
super.onResume();
Log.d(TAG,"-- onPause--");
}

@Override
protected void onStart() {
super.onStart();
Log.d(TAG,"-- onPause--");
}

@Override
protected void onRestart() {
super.onRestart();
Log.d(TAG,"-- onRestar--");
}
}
当我们在模拟器中启动Activity时打印信息如下,可以看出来它调用了onCreate、onStart、onResume三个方法

你可以通过操作应用程序来查看更多情况下的Activity生命周期的变化。
这些都是Android中的基础知识,推荐你可以在一个叫做秒秒学的教程网站上可以找到相关资料。

㈤ 如何获取 android 的系统日志 logcat

在windows7操作系统下,开发平台为android studio可以按照如下步骤获取android 的系统日志 logcat。

1、首先打开android studio的页面,如下图:

㈥ Android logcat使用总结

输出指定的ring buffer(s). 可选项如下:

多选使用‘,’作为分隔符:
-b main,system,radio,events,crash,kernel

-d Dump the log and then exit (don't block).
mp出logcat后即退出,不阻塞。

--pid=<pid> Only print logs from the given pid.
指定输出pid打印的logcat。
例如(只输出system_server的打印):
logcat --pid= pidof system_server

-v指定输出格式,可选的格式如下:
brief — Display priority/tag and PID of the process issuing the message.
例如:
D/WindowManager( 845): Receive Input KeyEvent of Powerkey up
process — Display PID only.
例如:
W( 356) Warning: Dispc cannot support 5 layer blending(0) (DPUMole

raw — Display the raw log message, with no other metadata fields.
例如:
Checking safeboot...

tag — Display the priority/tag only.
例如:
I/chatty : uid=1000(system) PowerController expire 22 lines

thread — Display priority, PID and TID of process issuing the message.
例如:
I( 845: 885) uid=1000(system) ActivityManager expire 8 lines

threadtime — Display the date, invocation time, priority, tag, and the PID
and TID of the thread issuing the message. (the default format).

例如:
04-15 10:34:11.352 587 1282 I chatty : uid=1000(system) watchdog expire 10 lines

time — Display the date, invocation time, priority/tag, and PID of the
process issuing the message.

例如:
04-15 12:43:42.509 V/FingerprintService( 845): mDaemon was null, reconnect to fingerprint

long — Display all metadata fields, separate messages with blank lines.
例如:

-v threadtime 是默认值:

另外,还可以额外添加修饰符:

例如(color,会以不同的颜色分别高亮不同优先级的打印):
logcat -v tag,color

将logcat保存到本地。

如果长时间抓取logcat,一般推荐 -f -r -n 一起使用。
例如(保存到data/logcat.txt,每个文件最大2M,最多保存20个文件):
logcat -f data/logcat.txt -r 2048 -n 20

设置过滤器。

-s Set default filter to silent. Equivalent to filterspec '*:S'
slient,最高优先级显示。

使用正则表达式。
例如:
logcat -e ^check.+$

例如:

-g/-G 用于查看/修改ring buffer的大小。

热点内容
压缩内存软件 发布:2025-01-31 16:51:39 浏览:145
脚本lcd 发布:2025-01-31 16:41:02 浏览:515
安卓selinux干什么用的 发布:2025-01-31 16:32:04 浏览:531
侠盗猎车手加钱密码是多少 发布:2025-01-31 15:44:28 浏览:662
没密码怎么登微信 发布:2025-01-31 15:33:51 浏览:737
c语言死机程序 发布:2025-01-31 15:07:52 浏览:18
编程教育装修 发布:2025-01-31 15:04:38 浏览:402
函数和存储过程的区别 发布:2025-01-31 14:39:12 浏览:610
地下室柱子箍筋的加密 发布:2025-01-31 14:36:11 浏览:935
手机拍摄视频在哪个文件夹 发布:2025-01-31 14:34:28 浏览:761