android日誌分析
1. android crash日誌怎麼分析
原始的方法都比較麻煩了,現在有很多的崩潰捕捉工具,可以都快速的定位崩潰堆棧詳情,同時日誌也會一並上報的,現在比較新的工具是Bugout,一些別工具還有bugly、bugtags和bugclos,你可以篩選一下,哪個適合你。
2. android手機日誌怎麼查看 查看方法快來這里學一學
安卓的手機日誌需要在手機文件管理中查看。
1、首先在桌面上找到【文件管理器】圖標,點擊進入文件瀏覽頁面。
2、在文件瀏覽頁面,找到手機的系統文件夾。
3、在系統的文件夾中,找到帶有【debug_log】字元的文件。這是手機的日誌文件存放的位置,中文意思是【手機調試日誌】。
4、進入文件夾後,可以文件夾中存放著以數字串命名的文件。這就是手機的日誌文件。一般以手機日誌生成日期命名,【、log】是日誌的文件格式後綴。
5、打開任意一個日誌文件即可進行查看,日誌文件中記錄了手機許多信息,其中也包括一些隱私信息,用戶操作需要注意隱私保護。
3. 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輸出內核日誌
4. Android 日誌系統分析(二):logd
logd 守護進程是日誌系統的管家,內部維持三個日誌 Socket : logd、logdr、logdw 來與客戶端進行通信。同時負責維護幾個環形緩沖區,用於存放系統中的各種日誌,緩沖區包含 main、system、events、radio、crash、kernel ;但是在 Android 5.0 之前, logd 進程並不存在,日誌是保留在 /dev/log/main、/dev/log/system、/dev/log/radio、/dev/log/event 等節點中,但是這樣面臨的一個問題就是當 Android 系統大版本升級時, linux kernel 需要升級對應的日誌驅動,因此在後續的版本中就有了 logd 進程。
在 Android 日誌系統分析(一):概述 一文中,總結了整個日誌讀寫的主要流程,因此對於 logd 進程是如何同外界溝通進而讀寫日誌的過程不再贅述,而著重於 logd 本身的一些知識點,這里先看一下 logd 的系統框圖:
知識點:
① logd 是日誌系統的核心進程,由 init 啟動,是屬於守護進程常駐後台
② logd 維護各個日誌節點緩存隊列,提供 socket 介面進行讀、寫、控制功能
③ logd 進程啟動後,分別啟動 LogReader、LogListener、CommandListener 三個線程,監聽並處理來自三個 socket 的消息。在收到消息後,會通過 LogBuffer 類保存日誌到對應的 RAM buffer 中
④ LogAudit 模塊用於接收 Kernel selinux 信息,即可以在用戶空間列印 selinux 日誌信息
⑤ LogKlog 用於接收 kernel 日誌信息,通過設置 property ,可以通過 logcat 命令讀取內核日誌
⑥ LogStatistics 是日誌統計模塊,默認開啟統計數據較少,僅能以 pid/uid 緯度統計列印日誌的數量。如果設置了 logd.statistic = true 。會列印更多緯度的統計信息,包括哪些 pid/uid/tid/TAG 日誌量比較大,可用於日誌裁剪相關
在 main 函數中,會打開 /dev/kmsg 來讀取內核日誌,通過 LogKlog 來進行存儲;若是配置了 ro.logd.kernel 屬性,則打開 /proc/kmsg 讀取內核日誌;
logd 作為 Native Service ,系統啟動時會讀取 init.rc 腳本去啟動,它的相關屬性被定義在 logd.rc 文件中:
這里主要分為兩部分: 啟動 logd 服務 和 啟動 logd-reinit 服務 (在Android 10 上添加了 logd-auditctl 服務,目的是為了限制 selinux denia列印日誌為5秒一次);先來看一下 啟動 logd 服務 的同時做了些什麼:
① 創建 logd、logdr、logdw 這三個 socket 為後面的通信做准備
② logdw 定義為 dgram 類型的 socket ,類似與 UDP類型的 Socket ,這么做的原因是考慮到性能問題,在多個進程同時寫日誌的情況下, write 函數寫入到 socket 的 buffer 中即可返回,這樣不會 block 業務邏輯太長時間。如果是 TCP 類型的 Socket ,客戶端需要等到 TCP 收到 ACK 響應才能返回,這樣就會過多的消耗性能和資源;
啟動 logd-reinit 服務:
這個服務的主要作用是重新初始化 logd 的 LogBuffer,在配置中 oneshot 表示開機只啟動一次。在上面的 main.cpp 中的 main 函數內, logd 在啟動後,會創建一個線程 reinit_thread_start () ,當 logd-reinit 傳入參數 reinit 後,進行功能執行:
① 如果 reinit 啟動後,並且 /deg/kmsg 打開成功,把 logd.daemon: renit 寫入 kmsg
② 重新初始化各個 log buffer 的大小,以及其他參數的初始化,但不會重新生成 LogBuffer 對象
main.cpp##main
main.cpp#reinit_thread_start()
[ 1 ] 深入理解安卓日誌系統(logcat / liblog / logd)
[ 2 ] Android10.0 日誌系統分析(二)-logd、logcat架構分析及日誌系統初始化
5. Android系統的系統日誌有哪幾個文件,這些文件中包含什麼內容
手機的android log(main_log、events_log、kernel_log),mainlog記錄手機android上層app以及framework相關活動的log,比如app列印的log。
eventslog主要是ActivityManager、powerManager等相關的log;Kernellog則主要是驅動相關的log。
Modem log,主要是通話相關的,比如信號強弱、連接網路等。netlog,查看網路鏈接情況,抓取網路包等。其它有data/anr 目錄下的traces/tombstones等,分析死機、重啟。
mainlog,查看應用申請什麼許可權,一般不會開放。
(5)android日誌分析擴展閱讀:
系統日誌的價值
系統日誌策略可以在故障剛剛發生時就向你發送警告信息,系統日誌幫助你在最短的笑明時間內發現問題。
系統日誌是一種非常關鍵的組件,因為系統日誌可以讓你充分了解自己的環境。這種系統日誌信息對於決定故障的根本原因或者縮小系統攻擊范圍來說是非常關鍵的,因為系統日誌可以讓你了解故障或者襲擊發生之前的所有事件。
為虛擬化環境制定一套良好的系統日誌策略也是至關重要的,因為系統日誌需要和許多不同的外部組件進行關聯。良好的系統日誌可以防止你租升老從錯誤的角度分析問題,避免浪費寶貴的排錯時間。
另外一種原因是藉助於系統日誌,管理員很有可能會發現一些之前從未意識到的問題,在幾乎所有剛剛部署系統弊升日誌的環境當中。
使用系統日誌產品當中包含的其他特性,包括向監控團隊自動發送報警通知等功能。系統日誌基於警報類型或者准確的警報消息,系統日誌可以通過觸發特定操作來完成。
系統日誌通過簡單地設定這些警報,你將會在自己的環境中處於更加主動的位置,因為你可以在事故變得更加嚴重之前得到通知。
6. android的日誌Logger和Log比較,哪個好
建議使用Log,這是android專門用來開發列印日誌使用的。輸出的日誌可以在Logcat中查看。
Android開發中,所的有輸出都在logcat中 包含System.out輸出和printStackTrace()輸出都在Logcat中,Android開發,建議使用android提供的Log工具類來列印信息。
找到Logcat視圖的方式:
Eclipse 點擊 Window
Show View會出來一個對話框
點擊Ok按鈕時,會在控制台窗口出現LogCat視圖
android.util.Log常用的方法有以下5個:Log.v()Log.d()Log.i()Log.w()以及Log.e()。根據首字母對應VERBOSE,DEBUG,INFO,WARN,ERROR。
1、Log.v 的調試顏色為黑色的,任何消息都會輸出,這里的v代表verbose啰嗦的意思,平時使用就是Log.v("","");
2、Log.d的輸出顏色是藍色的,僅輸出debug調試的意思,但他會輸出上層的信息,過濾起來可以通過DDMS的Logcat標簽來選擇.
3、Log.i的輸出為綠色,一般提示性的消息information,它不會輸出Log.v和Log.d的信息,但會顯示i、w和e的信息
4、Log.w的意思為橙色,可以看作為warning警告,一般需要我們注意優化Android代碼,同時選擇它後還會輸出Log.e的信息。
5、Log.e為紅色,可以想到error錯誤,這里僅顯示紅色的錯誤信息,這些錯誤就需要認真的分析,查看棧的信息了。
7. Android系統穩定性Log分析
前言:
在平時我們開發工作中,經常會遇到系統死機、黑屏卡死、凍屏等各種莫簡中名其妙的問題,這對於我們系統開發工作者是一大挑戰,除了我們需要有處理問題經驗和能力外,我們需要藉助Google提供的各種log分析,提高我們定位處理問題的能力!
App這里問題比較常見,表現的現象為ANR、Crash、OOM等情況,可以通過Log日誌分析:
這屬於系統的穩定系,出現在system server死鎖問題,然後Android的WatchDog看門狗檢測到了,然後重啟Android相關進程導致,可以通過以下手段捕獲奔潰日誌:
終端黑屏(Black screen)這種系統穩定性問題,一般出現問題時,此時power按鍵一般能用,可以通過adb shell getevent查看到input事件信息,可以通過如下手段捕獲崩潰日誌:
這是Android系統穩定性裡面最嚴重的,此時一般按Power按鍵、菜單鍵等都是失效的,此時可以通過adb shell getevent查看不到到input事件信息,看不到任何信息了,我們這是可以通過如下手段捕獲日誌:
以上Log分析是針對不同的Android系統穩定性,提供抓日誌方法。有了相關日誌信息我們才能進一步進行具體日誌分析,分析日誌需要考研開發人員的硬實力了,有什麼問題歡迎留言探世咐討!
拓展內容:
BugReport分析工具:
google開源
ChkBugReport開源
另一種問題定位分析方式,搜咐純更精確: Android 系統全局Bug日誌監聽
8. 有哪些值得推薦的 Android 日誌信息分析工具
剛巧最近在研究Android的錯誤日誌統計功能.分享兩個開源項目
code google com/p/android-log-collector
主要靠logcat根據tag來收集日誌.
code google com/p/acra/
主要是implements Thread.UncaughtExceptionHandler ,然後注冊Thread.(this)
通過uncaughtException再進行過濾收集.