这几天一直在做Android 端测试,经常需要使用adb,经常需要查看log。今天就来单纯的就讲一讲logcat的使用方法。
直接进入主题。
adb logcat 命令格式 : adb logcat [选项] [过滤项]
其中 选项 和 过滤项 在 中括号 [] 中, 说明这是可选的;
adb logcat -v time >C:\Users\z\Desktop\log.txt
解析:-- "-v"选项 : 设置日志的输出格式, 注意只能设置一项;以时间的格式将log输出在桌面。
输出指定标签内容 :
-- "-s"选项 : 设置默认的过滤器, 如 我们想要输出 "System.out" 标签的信息, 就可以使用 adb logcat -s System.out
[plain]
view plain
copy
1. octopus@octopus:~$ adb logcat -s System.out
2. --------- beginning of /dev/log/system
3. --------- beginning of /dev/log/main
4. I/System.out(22930): GSM -91
5. I/System.out(22930): SignalStrength issssssssss : -91
6. I/System.out(22930): GSM -91
7. I/System.out(22930): SignalStrength issssssssss : -91
8. I/System.out(22930): Supervisor Thread
9. I/System.out(22930): Got run mode
清空日志缓存信息
将缓存日志输出 : 使用 adb logcat -d 命令, 输出命令, 之后推出命令, 不会进行阻塞;
输出最近的日志 : 使用 adb logcat -t 5 命令, 可以输出最近的5行日志, 并且不会阻塞
(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 以上级别的日志;
[plain]
view plain
copy
1. octopus@octopus:~$ adb logcat *:E
2.
3. Note: log switch off, only log_main and log_events will have logs!
4. --------- beginning of /dev/log/main
5. E/WifiHW ( 441): wifi_send_command : SCAN_RESULTS ; interface index=0;
6. E/WifiHW ( 441): wifi_send_command : AP_SCAN 1 ; interface index=0;
7. E/WifiHW ( 441): wifi_send_command : SCAN_RESULTS ; interface index=0;
8. E/dalvikvm( 756): GC_CONCURRENT freed 1809K, 27% free 19489K/26695K, paused 16ms+5ms, total 109ms
9. E/WifiHW ( 441): wifi_send_command : SCAN ; interface index=0;
10. E/WifiHW ( 441): wifi_send_command : AP_SCAN 1 ; interface index=0;
11. E/WifiHW ( 441): wifi_send_command : SCAN_RESULTS ; interface index=0;
12. E/dalvikvm( 756): GC_CONCURRENT freed 1820K, 27% free 19490K/26695K, paused 16ms+3ms, total 102ms
13. E/WifiHW ( 441): wifi_send_command : AP_SCAN 1 ; interface index=0;
14. E/WifiHW ( 441): wifi_send_command : SCAN_RESULTS ; interface index=0;
过滤指定标签等级日志 : 使用 adb logcat WifiHW:D *:S 命令进行过滤;
-- 命令含义 : 输出10条日志, 日志是 标签为 WifiHW, 并且优先级 Debug(调试) 等级以上的级别的日志;
-- 注意 *:S : 如果没有 *S 就会输出错误;
octopus@octopus:~$ adb logcat WifiHW:D *:S
Note: log switch off, only log_main and log_events will have logs!
--------- beginning of /dev/log/main
E/WifiHW ( 441): wifi_send_command : SCAN_RESULTS ; interface index=0;
E/WifiHW ( 441): wifi_send_command : AP_SCAN 1 ; interface index=0;
E/WifiHW ( 441): wifi_send_command : SCAN_RESULTS ; interface index=0;
E/WifiHW ( 441): wifi_send_command : AP_SCAN 1 ; interface index=0;
E/WifiHW ( 441): wifi_send_command : SCAN_RESULTS ; interface index=0;
E/WifiHW ( 441): wifi_send_command : AP_SCAN 1 ; interface index=0;
E/WifiHW ( 441): wifi_send_command : SCAN_RESULTS ; interface index=0;
可以同时设置多个过滤器 : 使用 adb logcat WifiHW:D dalvikvm:I *:S 命令, 输出 WifiHW 标签 的 Debug 以上级别 和 dalvikvm 标签的 Info 以上级别的日志;
octopus@octopus:~$ adb logcat WifiHW:D dalvikvm:I *:S
Note: log switch off, only log_main and log_events will have logs!
--------- beginning of /dev/log/main
E/WifiHW ( 441): wifi_send_command : AP_SCAN 1 ; interface index=0;
E/WifiHW ( 441): wifi_send_command : SCAN_RESULTS ; interface index=0;
E/dalvikvm( 756): GC_CONCURRENT freed 1820K, 27% free 19490K/26695K, paused 17ms+2ms, total 110ms
E/WifiHW ( 441): wifi_send_command : AP_SCAN 1 ; interface index=0;
E/WifiHW ( 441): wifi_send_command : SCAN_RESULTS ; interface index=0;
E/WifiHW ( 441): wifi_send_command : AP_SCAN 1 ; interface index=0;
E/WifiHW ( 441): wifi_send_command : SCAN_RESULTS ; interface index=0;
E/dalvikvm( 756): GC_CONCURRENT freed 1810K, 27% free 19489K/26695K, paused 17ms+5ms, total 108ms
E/WifiHW ( 441): wifi_send_command : AP_SCAN 1 ; interface index=0;
E/WifiHW ( 441): wifi_send_command : SCAN_RESULTS ; interface index=0;
2. 使用管道过滤日志
(1) 过滤固定字符串
过滤固定字符串 : 只要命令行出现的日志都可以过滤, 不管是不是标签;
-- 命令 :
octopus@octopus:~$ adb logcat | grep Wifi
E/WifiHW ( 441): wifi_send_command : AP_SCAN 1 ; interface index=0;
E/WifiHW ( 441): wifi_send_command : SCAN_RESULTS ; interface index=0;
E/WifiHW ( 441): wifi_send_command : SCAN ; interface index=0;
E/WifiHW ( 441): wifi_send_command : AP_SCAN 1 ; interface index=0;
E/WifiHW ( 441): wifi_send_command : SCAN_RESULTS ; interface index=0;
E/WifiHW ( 441): wifi_send_command : AP_SCAN 1 ; interface index=0;
E/WifiHW ( 441): wifi_send_command : SCAN_RESULTS ; interface index=0;
过滤字符串忽略大小写 :
adb logcat | grep -i wifi
(2) 使用正则表达式匹配
分析日志 : 该日志开头两个字符是 "V/", 后面开始就是标签, 写一个正则表达式 "^..ActivityManager", 就可以匹配日志中的 "V/ActivityManager" 字符串;
[plain]
view plain
copy
- V/ActivityManager( 574): getTasks: max=1, flags=0, receiver=null
正则表达式过滤日志 : 使用上面的正则表达式组成命令
adb logcat | grep "^..Activity"