微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Ubuntu 下 使用 adb logcat 显示 Android 日志

作者:万境绝尘转载请著名出处


eclipse 自带的 LogCat 工具太垃圾了,开始用 adb logcat 在终端查看日志;


1. 解析 adb logcat 的帮助信息

在命令行中输入adb logcat --help命令,就可以显示该命令的帮助信息;

[plain] view plain copy
  1. octopus@octopus:~$adblogcat--help
  2. Usage:logcat[options][filterspecs]
  3. optionsinclude:
  4. -sSetdefaultfiltertosilent.
  5. Likespecifyingfilterspec'*:s'
  6. -f<filename>Logtofile.Defaulttostdout
  7. -r[<kbytes>]Rotatelogeverykbytes.(16ifunspecified).Requires-f
  8. -n<count>Setsmaxnumberofrotatedlogsto<count>,default4
  9. -v<format>Setsthelogprintformat,where<format>isoneof:
  10. briefprocesstagthreadrawtimethreadtimelong
  11. -cclear(flush)theentirelogandexit
  12. -ddumpthelogandthenexit(don'tblock)
  13. -t<count>printonlythemostrecent<count>lines(implies-d)
  14. -ggetthesizeofthelog'sringbufferandexit
  15. -b<buffer>Requestalternateringbuffer,'main','system','radio'
  16. or'events'.Multiple-bparametersareallowedandthe
  17. resultsareinterleaved.Thedefaultis-bmain-bsystem.
  18. -Boutputtheloginbinary
  19. filterspecsareaseriesof
  20. <tag>[:priority]
  21. where<tag>isalogcomponenttag(or*forall)andpriorityis:
  22. VVerbose
  23. DDebug
  24. IInfo
  25. WWarn
  26. EError
  27. FFatal
  28. SSilent(supressalloutput)
  29. '*'means'*:d'and<tag>byitselfmeans<tag>:v
  30. Ifnotspecifiedonthecommandline,filterspecissetfromANDROID_LOG_TAGS.
  31. Ifnofilterspecisfound,filterdefaultsto'*:I'
  32. Ifnotspecifiedwith-v,formatissetfromANDROID_PRINTF_LOG
  33. ordefaultsto"brief"


adb logcat 命令格式: adb logcat [选项] [过滤项],其中 选项 和 过滤项 在 中括号 [] 中,说明这是可选的;


(1) 选项解析

选项解析:

--"-s"选项: 设置输出日志的标签,只显示标签的日志;

"-f"选项: 将日志输出文件,输出到标准输出流中,-f 参数执行不成功;

"-r"选项: 按照每千字节输出日志,需要 -f 参数,不过这个命令没有执行成功;

"-n"选项: 设置日志输出的最大数目,需要 -r 参数,这个执行 感觉 跟 adb logcat 效果一样;

"-v"选项: 设置日志的输出格式,注意只能设置一项;

"-c"选项: 清空所有的日志缓存信息;

"-d"选项: 将缓存的日志输出到屏幕上,并且不会阻塞;

"-t"选项: 输出最近的几行日志,输出退出,不阻塞;

"-g"选项: 查看日志缓冲区信息;

"-b"选项: 加载一个日志缓冲区,认是 main,下面详解;

"-B"选项: 以二进制形式输出日志;

.

输出指定标签内容:

--"-s"选项: 设置认的过滤器,如 我们想要输出 "System.out" 标签的信息,就可以使用adb logcat -s System.out命令;

copy

    octopus@octopus:~$adblogcat-sSystem.out
  1. ---------beginningof/dev/log/system
  2. ---------beginningof/dev/log/main
  3. I/System.out(22930):GSM-91
  4. I/System.out(22930):SignalStrengthissssssssss:-91
  5. I/System.out(22930):SupervisorThread
  6. I/System.out(22930):Gotrunmode

输出日志信息到文件:

"-f"选项: 该选向后面跟着输入日志的文件,使用adb logcat -f log命令,会出现错误,这里我们不推荐使用该选项;

copy

    octopus@octopus:~$adblogcat-flog
  1. Couldn'topenoutputfile:Read-onlyfilesystem
-- ">"输出 : ">" 后面跟着要输出的日志文件,可以将 logcat 日志输出文件中,使用 adb logcat > log 命令,51); background-color: rgb(0,0);">more log 命令查看日志信息;

copy

    octopus@octopus:~$adblogcat>log
  1. ^C
  2. octopus@octopus:~$morelog
  3. V/ActivityManager(500):Wehavependingthumbnails:null
  4. V/ActivityManager(500):getTasks:max=1,flags=0,receiver=null
  5. V/ActivityManager(500):com.android.settings/.Settings:task=TaskRecord{42392278#448Acom.android.settingsU0}
  6. V/ActivityManager(500):Wehavependingthumbnails:null

指定 logcat 的日志输出格式 : "-v"选项: 使用adb logcat -v time命令,可以啥看日志的输出时间;

"brief"格式: 这是认的日志格式" 优先级 / 标签 (进程ID) : 日志信息 ",0);">adb logcat -v prief命令;

copy

    octopus@octopus:~$adblogcat-vbrief
  1. D/PowerManagerService(500):handleSandman:canDream=true,mWakefulness=Awake
  2. D/PowerManagerService(500):releaseWakeLockInternal:lock=1101267696,flags=0x0
"process"格式 " 优先级 (进程ID) : 日志信息 " ,0);">adb logcat -v process 命令; copy
    octopus@octopus:~$adblogcat-vprocess
  1. D(500)MobileDataStateReceiverreceived:ACTION_ANY_DATA_CONNECTION_STATE_CHANGED_MOBILE[wap](MobileDataStateTracker)
  2. V(500)broadcast:Intent{act=android.intent.action.ANY_DATA_STATE_MOBILEflg=0x10(hasextras)}ordered=trueuserid=0(ActivityManager)
  3. D(500)wap:IntentfromSIM0,currentSIM0,currentDataStatedisCONNECTED(MobileDataStateTracker)
  4. D(500)wap:wapsettingisAvailabletofalse(MobileDataStateTracker)
  5. D(500)wap:Receivedstate=disCONNECTED,old=disCONNECTED,reason=dataDetached(MobileDataStateTracker)
  6. D(500)BDC-CallingfinishReceiver:IIntentReceiver=41c46ba0(ActivityThread)
"tag"格式
" 优先级 / 标签 : 日志信息" adb logcat -v tag copy
    octopus@octopus:~$adblogcat-vtag
  1. I/PowerManagerService:setBrightnessmButtonLight0.
  2. D/PowerManagerService:updateScreenStateLocked:mdisplayReady=true,newScreenState=2,mWakefulness=1,mWakeLockSummary=0x1,mUserActivitySummary=0x1,mBootCompleted=true
  3. D/PowerManagerService:handleSandman:canDream=true,mWakefulness=Awake
"thread"格式
" 优先级 ( 进程ID : 线程ID) 标签 : 日志内容 " copy
    octopus@octopus:~$adblogcat-vthread
  1. V(500:2141)getTasks:max=1,receiver=null
  2. V(500:2141)com.lewa.launcher/.Launcher:task=TaskRecord{41dccc20#425Acom.lewa.launcherU0}
  3. V(500:2141)Wehavependingthumbnails:null
  4. V(500:2140)getTasks:max=1,receiver=null
"raw"格式
: 只输出日志信息,不附加任何其他 信息,如 优先级 标签等,0);">adb logcat -v raw copy
    octopus@octopus:~$adblogcat-vraw
  1. notificationsareenabledforcom.kindroid.security
  2. Assignedscore=0toNotification(pri=0contentView=com.kindroid.security/0x7f030052vibrate=nullsound=nulldefaults=0x0flags=0x2kind=[null])
  3. Nativesetalarm:Alarm{41e1ca00type3com.kindroid.security}
  4. resetpoweroffalarmnone
"time"格式
"日期 时间 优先级 / 标签 (进程ID) : 进程名称 : 日志信息 " adb logcat -v time copy
    octopus@octopus:~$adblogcat-vtime
  1. 04-2517:18:13.019V/ActivityManager(500):broadcaststicky:Intent{act=android.intent.action.SIG_STRflg=0x10(hasextras)}ordered=falseuserid=-1
  2. 04-2517:18:13.157V/NotificationService(500):enqueueNotificationInternal:pkg=com.kindroid.securityid=1020notification=Notification(pri=0contentView=com.kindroid.security/0x7f030052vibrate=nullsound=nulldefaults=0x0flags=0x2kind=[null])
  3. 04-2517:18:13.158V/NotificationService(500):notificationsareenabledforcom.kindroid.security
  4. 04-2517:18:13.158V/NotificationService(500):Assignedscore=0toNotification(pri=0contentView=com.kindroid.security/0x7f030052vibrate=nullsound=nulldefaults=0x0flags=0x2kind=[null])
  5. 04-2517:18:13.555V/ActivityManager(500):getTasks:max=1,255);">"long"格式 " [ 日期 时间 进程ID : 线程ID 优先级 / 标签] 日志信息 " 输出以上提到的所有的头信息,使用 adb logcat -v long copy
      octopus@octopus:~$adblogcat-vlong
    1. [04-2517:21:18.118500:0x2feV/ActivityManager]
    2. Wehavependingthumbnails:null
    3. [04-2517:21:18.696593:0x251W/ActivityThread]
    4. Contentprovidercom.android.providers.telephony.TelephonyProvideralreadypublishedastelephony
    5. [04-2517:21:19.119500:0x396V/ActivityManager]
    6. getTasks:max=1,receiver=null

    清空日志缓存信息
    : 使用 adb logcat -c 输出日志信息;
    将缓存日志输出 adb logcat -d 输出命令,之后推出命令,不会进行阻塞; 输出最近的日志: 使用adb logcat -t 5命令,可以输出最近的5行日志,160); border: none; padding: 1px; margin: 0px 10px 0px 0px; font-size: 9px; display: inline-block; width: 16px; height: 16px; text-indent: -2000px; background-image: url(http://static.blog.csdn.net/scripts/SyntaxHighlighter/styles/images/default/ico_copy.gif); background-color: inherit; background-position: 0% 0%; background-repeat: no-repeat;">copy
      octopus@octopus:~$adblogcat-t5
    1. W/ADB_SERVICES(10028):adb:unabletoopen/proc/10028/oom_adj
    2. D/dalvikvm(23292):threadid=11:createdfrominterp
    3. D/dalvikvm(23292):startnewthread
    4. D/dalvikvm(23292):threadid=11:notifydebugger
    5. D/dalvikvm(23292):threadid=11(Thread-24538):callingrun()
    6. octopus@octopus:~$

    查看日志缓冲区信息 adb logcat -g copy
      octopus@octopus:~$adblogcat-g
    1. /dev/log/main:ringbufferis256Kb(255Kbconsumed),maxentryis5120b,maxpayloadis4076b
    2. /dev/log/system:ringbufferis256Kb(255Kbconsumed),maxpayloadis4076b
    3. octopus@octopus:~$

    加载日志缓冲区
    adb logcat -b 缓冲区类型 Android中的日志缓冲区: system缓冲区 - 与系统相关的日志信息,radio缓冲区 - 广播电话相关的日志信息,events缓冲区 - 事件相关的日志信息,main缓冲区 - 认的缓冲区;

    copy

      octopus@octopus:~$adblogcat-bradio-t5
    1. D/PHONE(23599):[geminiDataSubUtil]UAPP_C6-4
    2. D/GSM(23599):[GDCT][simId1]apnType=default
    3. D/GSM(23599):[GDCT][simId1]isDataAllowed:notalloweddueto-gprs=1-SIMnotloaded-desiredPowerState=false
    4. D/GSM(23599):[GDCT][simId1]isDataPossible(default):possible=falseisDataAllowed=falseapnTypePossible=trueapnContextisEnabled=trueapnContextState()=IDLE
    5. I/MUXD(23591):[gsm0710muxd]3426:main():Framesreceived/dropped:18242/0
    6. octopus@octopus:~$
    7. octopus@octopus:~$adblogcat-bmain-t5
    8. D/NotificationService(500):notification.sound=null
    9. D/NotificationService(500):mDmlock=false
    10. I/ATCIJ(16576):Couldn'tfind'atci-serv-fw'socket;retryingaftertimeout
    11. W/ADB_SERVICES(246):create_local_service_socket()name=shell:exportANDROID_LOG_TAGS="";execlogcat-bmain-t5
    12. W/ADB_SERVICES(16815):adb:unabletoopen/proc/16815/oom_adj
    13. octopus@octopus:~$
    14. octopus@octopus:~$adblogcat-bsystem-t5
    15. D/PowerManagerService(500):updateScreenStateLocked:mdisplayReady=true,newScreenState=0,mWakefulness=0,mUserActivitySummary=0x0,108); color: inherit; line-height: 18px; background: none;">D/PowerManagerService(500):handleSandman:canDream=false,mWakefulness=Asleep
    16. V/NotificationService(500):enqueueNotificationInternal:pkg=com.kindroid.securityid=1020notification=Notification(pri=0contentView=com.kindroid.security/0x7f030052vibrate=nullsound=nulldefaults=0x0flags=0x2kind=[null])
    17. V/NotificationService(500):notificationsareenabledforcom.kindroid.security
    18. V/NotificationService(500):Assignedscore=0toNotification(pri=0contentView=com.kindroid.security/0x7f030052vibrate=nullsound=nulldefaults=0x0flags=0x2kind=[null])
    19. octopus@octopus:~$adblogcat-bevent-t5
    20. Unabletoopenlogdevice'/dev/log/event':Nosuchfileordirectory
    21. octopus@octopus:~$adblogcat-bevents-t5
    22. I/notification_cancel(500):[com.kindroid.security,1026,NULL,64]
    23. I/notification_enqueue(500):[com.kindroid.security,1020,Notification(pri=0contentView=com.kindroid.security/0x7f030052vibrate=nullsound=nulldefaults=0x0flags=0x2kind=[null])]
    24. 以二进制形式输出日志 adb logcat -B copy
        octopus@octopus:~$adblogcat-B-t5
      1. O��_�3ZS�4gps_mt3326nmea_reader_parse:line=1218GPSgetaccuracyFailed,fixmode:1
      2. ^��_�3ZS�=gps_mt3326nmea_reader_addc:line=1331thestructureincludenmea_cbaddressis0x658cc8e8
      3. H��_�3ZSEGEgps_mt3326nmea_reader_addc:line=1332nmea_cbaddressis0x5d2fe279
      4. i���3ZS�)>ADB_SERVICEScreate_local_service_socket()name=shell:exportANDROID_LOG_TAGS="";execlogcat-B-t5
      5. 7*E*E�3ZSo�YADB_SERVICESadb:unabletoopen/proc/17706/oom_adj


      (2) 过滤项解析

      过滤项格式:<tag>[:priority],标签:日志等级,认的日志过滤项是 " *:I " ;

      V: Verbose (明细);

      D: Debug (调试);

      I: Info (信息);

      W: Warn (警告);

      E: Error (错误);

      F: Fatal (严重错误);

      S: Silent(Super all output) (最高的优先级,可能不会记载东西);

      过滤指定等级日志: 使用adb logcat 10 *:E命令,显示 Error 以上级别的日志;

      copy

        octopus@octopus:~$adblogcat*:E
      1. Note:logswitchoff,onlylog_mainandlog_eventswillhavelogs!
      2. ---------beginningof/dev/log/main
      3. E/WifiHW(441):wifi_send_command:SCAN_RESULTS;interfaceindex=0;
      4. E/WifiHW(441):wifi_send_command:AP_SCAN1;interfaceindex=0;
      5. E/dalvikvm(756):GC_CONCURRENTfreed1809K,27%free19489K/26695K,paused16ms+5ms,total109ms
      6. E/WifiHW(441):wifi_send_command:SCAN;interfaceindex=0;
      7. E/dalvikvm(756):GC_CONCURRENTfreed1820K,27%free19490K/26695K,paused16ms+3ms,total102ms
      8. E/WifiHW(441):wifi_send_command:AP_SCAN1;interfaceindex=0;
      9. E/WifiHW(441):wifi_send_command:SCAN_RESULTS;interfaceindex=0;

      过滤指定标签等级日志
      : 使用adb logcat WifiHW:D *:S命令进行过滤;

      命令含义: 输出10条日志,日志是 标签为WifiHW,并且优先级 Debug(调试) 等级以上的级别的日志;

      注意 *:S: 如果没有 *S 就会输出错误;

      copy

        octopus@octopus:~$adblogcatWifiHW:D*:S
      1. E/WifiHW(441):wifi_send_command:SCAN_RESULTS;interfaceindex=0;

      可以同时设置多个过滤器: 使用adb logcat WifiHW:D dalvikvm:I *:S命令,输出WifiHW 标签 的 Debug 以上级别 和dalvikvm 标签的 Info 以上级别的日志;

      copy

        octopus@octopus:~$adblogcatWifiHW:Ddalvikvm:I*:S
      1. E/WifiHW(441):wifi_send_command:SCAN_RESULTS;interfaceindex=0;
      2. E/dalvikvm(756):GC_CONCURRENTfreed1820K,paused17ms+2ms,total110ms
      3. E/dalvikvm(756):GC_CONCURRENTfreed1810K,paused17ms+5ms,total108ms
      4. 2. 使用管道过滤日志

        (1) 过滤固定字符串

        过滤固定字符串: 只要命令行出现的日志都可以过滤,不管是不是标签;

        命令:adb logcat | grep Wifi;

        copy

          octopus@octopus:~$adblogcat|grepWifi
        1. E/WifiHW(441):wifi_send_command:SCAN;interfaceindex=0;
        2. E/WifiHW(441):wifi_send_command:SCAN_RESULTS;interfaceindex=0;

        过滤字符串忽略大小写:adb logcat | grep -i wifi;


        (2) 使用正则表达式匹配

        分析日志: 该日志开头两个字符是 "V/",后面开始就是标签,写一个正则表达式 "^..ActivityManager",就可以匹配日志中的 "V/ActivityManager" 字符串;

        copy

          V/ActivityManager(574):getTasks:max=1,0);">正则表达式过滤日志: 使用上面的正则表达式组成命令adb logcat | grep "^..Activity";

          作者:万境绝尘转载请著名出处

          原文地址:https://www.jb51.cc/ubuntu/354416.html

          版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

          相关推荐