• Android日志监听工具logcat命令详解(转)


    Android日志系统提供了记录和查看系统调试信息的功能。日志都是从各种软件和一些系统的缓冲区中记录下来的,缓冲区可以通过logcat命令来查看和使用.

    在使用logcat之前,请确保手机的USB调试模式已经开启,可以通过"Setting->Application->Development->USB debugging"来开启。
    logcat本身是android的shell的一个命令,你可以通过“adb shell”进入shell后执行logcat命令,也可以通过"adb logcat"直接运行。
    语法:
    [adb] logcat [<option>] ... [<filter-spec>] ...
    选项:
    -b <buffer> 指定要查看的日志缓冲区,可以是system,events ,radio,main . 默认值是system和main 。
    -c 清楚屏幕上的日志. 
    -d 输出日志到屏幕上. 
    -f <filename> 指定输出日志信息的<filename> ,默认是stdout . 
    -g 输出指定的日志缓冲区,输出后退出. 
    -n <count> 设置日志的最大数目<count> .,默认值是4,需要和 -r 选项一起使用。 
    -r <kbytes> 每<kbytes> 时输出日志,默认值为16,需要和-f 选项一起使用. 
    -s 设置默认的过滤级别为silent. 
    -v <format> 设置日志输入格式,默认的是brief 格式,要知道更多的支持的格式,参看Controlling Log Output 
    参数<filter-spec>
    参数<filter-spec>用于对某类的tag的日志输出进行过滤。每一个输出的Android日志信息都有一个tag和它的优先级.
    日志的标签是系统部件原始信息的一个简要的标志。这个tag就是Log.i,Log.d,Log.i,Log.w,Log.e,Log.wtf系列函数中的tag.
    对于System.out.print系列函数所对于的tag,其实就是"System.out"
    <filter-spec>以“tag:priority”的形式来对日志输出进行过滤的
    优先级priority有以下几种,按照从低到高顺利排列如下:
    V — Verbose (lowest priority) 对应于Log.i()系列函数
    D — Debug 对应于Log.d()系列函数
    I — Info 对应于Log.i()系列函数
    W — Warning 对应于Log.w()系列函数
    E — Error 对应于Log.e()系列函数
    F — Fatal 对应于Log.wtf()系列函数
    S — Silent (highest priority, on which nothing s ever printed)
    在运行logcat的时候在前两列的信息中你就可以看到 logcat 的标签列表和优先级别,它是这样标出的:<priority>/<tag> .
    <filter-spec>中的优先级是指显示该优先级即其以上优先级得日志。比如对于robin:D表示显示tag为robin的所有Debug及其以上优先级的日志。<filter-spec>只是的针对某类的tag的日志进行过滤,如果有多个针对同一个tag的过滤的话,以最后一个为准。另外对于tag,可以使用通配符。对于在tag中没有使用统配符的<filter-spec>,我称它为显式的日志过滤器;而对于在tag中使用统配符的,我称它它为隐式的日志过滤器。如果这两种过滤器有对着同一个tag的过滤的话,以显示的日志过滤器为准。如果是同一种的话(显式/隐式),以后一个为准。
    因为<filter-spec>只是指明了对某一类tag应该进行如何过滤,它没说明的其他tag,将采用系统默认的方式(*:V),即全部输出。我们可以通过选项"-s"来设置<filter-spec>中没有说明的tag来都不输出,相当于"*.S"
    实例1:
    adb logcat -s robin:i
    这样将显现tag为robin的Info及以上优先级的所有的日志。该命令等同于adb logcat robin:i *:S
    -b 选项
    该选项用于指定要操作的日志缓冲区,可以是system,events ,radio,main .它们分别对应/dev/log文件夹下的system,events ,radio,main日志文件 。系统默认的是system和main 。该选项可以出现多次,以指定多个日志缓冲去。
    比如:
    adb logcat -b system -b main -b events -b radio -s robin:i
    日志输出的开头几行说明了你当前查看的哪些日志缓冲区,比如上面的语句的前几行就是:
    --------- beginning of /dev/log/radio
    --------- beginning of /dev/log/events
    --------- beginning of /dev/log/system
    --------- beginning of /dev/log/main
    其实“adb logcat -s robin:i”相当于“adb logcat -b system -b main -s robin:i”。我们的Log.i,Log.d,Log.i,Log.w,Log.e,Log.wtf系列函数及System.out.print系列函数以及System.erro.print系列都输出到了main缓冲区。因此我们一般用默认的就足够了。
    events缓冲区对应的日志文件/system/etc/event-log-tags,使用android.util.EventLog生成的日志就输出到该缓冲区。
    android.database.sqlite.SQLiteDatabase的logTimeStat()函数就是使用EventLog来进行日志输出的
    -c 选项
    该选项用于清空你所指定的日志缓冲区。应该就是清除其对应的日志文件
    -s 选项
    该选项将把tag的默认过滤级别设置为silent,这样tag默认就不显示。系统把tag的默认过滤级别是设置为Verbose,这样其tag默认就是要显示的。
    -f 选项
    该选项指定输出日志信息的<filename> ,默认是stdout . 但是这里的文件是指android系统上的文件。如果我们想把日志输出到本地window系统的话,请采用如下形式的命令:
    adb logcat -s robin:i>1.log
    这样日志就输出了你的window的当前目录的1.log文件中。
    -v 选项
    日志信息包括了许多元数据域包括标签和优先级。可以通过-v选项可以用来指定日志的输出格式,以显示出特定的元数据域。
    brief — Display priority/tag and PID of originating process (the default format).显示prority/tag,产生日志的进程的id,和日志消息本身。它是日志默认的输出格式。
    process — Display PID only.显示priority,产生日志的进程的id,和日志消息本身
    tag — Display the priority/tag only.显示prority/tag,和消息本身
    thread — Display process:thread and priority/tag only.显示priority,线程和日志消息本身
    raw — Display the raw log message, with no other metadata fields.只显示消息本身
    time — Display the date, invocation time, priority/tag, and PID of the originating process.显示产生日志的时间,prority/tag,产生日志的进程Id,和日志消息本身。
    long — Display all metadata fields and separate messages with a blank lines.显示产生日志的时间,prority/tag,产生日志的进程Id,和日志消息本身。但是日志消息本身另其一行进行显示。每个日志之间空一行。
    当启动了logcat ,你可以通过-v 选项来指定输出格式:
    [adb] logcat [-v <format>]
    实例2:
    adb logcat -v time -s robin:v
    注意是通过-v 选项来设置输出格式.
     
    更多:
  • 相关阅读:
    mac os programming
    Rejecting Good Engineers?
    Do Undergrads in MIT Struggle to Obtain Good Grades?
    Go to industry?
    LaTex Tricks
    Convert jupyter notebooks to python files
    How to get gradients with respect to the inputs in pytorch
    Uninstall cuda 9.1 and install cuda 8.0
    How to edit codes on the server which runs jupyter notebook using your pc's bwroser
    Leetcode No.94 Binary Tree Inorder Traversal二叉树中序遍历(c++实现)
  • 原文地址:https://www.cnblogs.com/tianma3798/p/6420143.html
Copyright © 2020-2023  润新知