❶ android手機日誌怎麼查看 查看方法快來這里學一學
安卓的手機日誌需要在手機文件管理中查看。
1、首先在桌面上找到【文件管理器】圖標,點擊進入文件瀏覽頁面。
2、在文件瀏覽頁面,找到手機的系統文件夾。
3、在系統的文件夾中,找到帶有【debug_log】字元的文件。這是手機的日誌文件存放的位置,中文意思是【手機調試日誌】。
4、進入文件夾後,可以文件夾中存放著以數字串命名的文件。這就是手機的日誌文件。一般以手機日誌生成日期命名,【、log】是日誌的文件格式後綴。
5、打開任意一個日誌文件即可進行查看,日誌文件中記錄了手機許多信息,其中也包括一些隱私信息,用戶操作需要注意隱私保護。
❷ 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架構分析及日誌系統初始化
❸ 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輸出內核日誌
❹ androidstudio 怎麼控制 log 日誌
啟動Android Studio,選中android工程並打開
工具欄選擇【Tools】-》【Android】
點擊【Android】選項,子選項選中【Android Device Monitor】,彈出窗口,該窗口類似eclipse
Android Device Monitor窗口,如圖
Android Device Monitor窗口上方有設備管理,可以選中已連接的模擬器或實際設備(android手機、平板),在右側的窗口可以查看當前設備的實時數據及狀態,如:數據連接,線程,文件管理等等
Android Device Monitor窗口下方為Logcat和Console 控制台
選擇需要追蹤的工程,查看詳細調試信息
7
可以對調試信息進行過濾,如標簽名,包名,日誌級別等
❺ android手機日誌怎麼查看
以小米手機為例,其他機型操作方法大致相同:
1.首先在手機桌面上找到【文件管理】,進入手機的文件管理頁面。
❻ Android高效日誌系統設計
日誌系統設計需要考慮的問題:
1.需要保證日誌系統收集到的數據的有效性和完整性,在app崩潰時日誌不丟失。
2.保證收集日誌的過程不影響app的性能,不能佔用過高cpu資源,或者頻繁IO造成卡頓現象。
簡單來說,日誌收集就是把app運行過程中產生的一些關鍵數據,給他採集保存起來,然後上傳到後台伺服器的過程。
這個採集過程,如果是每產生一次日誌數據,就寫一次文件,勢必造成系統IO調用的頻繁操作,可能會造成app運行卡頓現象。
MMAP就非常適用於解決這個問題。
MMAP是什麼?
MMAP是一種內存映射文件的方法,將文件或者一些對象映射到進程的地址空間。實現文件磁碟地址跟進程虛擬地址空間中的一段內存空間一一映射關系。在寫入進程的這段映射內存後,進程內存頁的臟數據會自動回寫到文件磁碟空間,這就以寫內存的效果來實現了寫文件的目的。
使用MMAP進行寫日誌,不僅解決了逐條日誌寫文件造成的頻繁IO卡頓問題,而且也保證了日誌數據的完整性,因為在app崩潰的時候,MMAP寫入的映射內存數據也會被操作系統自動回寫到文件磁碟空間,所以MMAP確實是高效日誌系統的首選。
微信的XLog,美團的Logan都是用的MMAP。
還有另一個問題,如何對日誌內容進行壓縮,以達到寫日誌更加高效?
微信的XLog的方案是每產生一條日誌,就進行壓縮並寫一次MMAP,壓縮演算法是LZ77壓縮(基於字典的壓縮演算法),壓縮率可達83.7%。
美團的Logan採用的是流式Gzip壓縮方式,每次以16kb為單位,通過z_stream將日誌流式進行Gzip壓縮,流式可以避免CPU峰值。當然這種方案有個缺點,就是沒有完美的解決日誌丟失問題,當app發生Crash,有可能丟失尚未寫入MMAP的16kb的日誌。