iOS 日志分析

源于iOS App開發(fā)時,控制臺日志混亂,不便于分析的需要,產(chǎn)生了這篇文章。

基礎(chǔ)票

說說NSLog

  • 調(diào)用NSLogv => Logs an error message to the Apple System Log facility.
  • Output from NSLogv is serialized, in that only one thread in a process can be doing the writing/logging described above at a time.
    • STDERR_FILENO
    • ASL

iOS日志重定向到文件

{
    //to log to document directory
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsPath = [paths objectAtIndex:0];
    NSString *loggingPath = [documentsPath stringByAppendingPathComponent:@"/mylog.log"];
    NSLog(@"%@", loggingPath);
    //redirect NSLog
    freopen([loggingPath cStringUsingEncoding:NSASCIIStringEncoding], "a+", stderr);
}

這樣我們就可以在電腦上面直接tail -f這個文件,配合grep等命令進(jìn)行日志分析了。

不進(jìn)行日志重定向

iOS模擬器的日志其實(shí)是輸出到系統(tǒng)中某個文件中了,好像是定時壓縮一個保存起來,我們只要找到那個文件就可以tailf了。


system.log文件在哪兒.png

根據(jù)當(dāng)前模擬器的identifier(windows-devices菜單)按圖示找到當(dāng)前模擬器腺癌的system.log文件,右鍵finder顯示,然后直接tailf就可以啦。

如何更方便呢?

To give yourself faster access to logs via terminal, you can add an alias to your .bash_profile file by typing:
echo "alias simulatorlog='tail -f ~/Library/Logs/iOS\ Simulator/7.0/system.log'" >> ~/.bash_profile
After it you can simply type simulatorlog into terminal window to access the logs.
像我自己的電腦,是這樣配的(查看iPhone6的日志):
alias mylog6='tail -f /Users/test/Library/Logs/CoreSimulator/0A5E599A-D202-4502-8E3C-B6E97840E7ED/system.log'
查看日志時,直接mylog6 | grep something
Enjoy.

============================分割線===============================

分享篇

下面是組內(nèi)分享時用的md文件,是一個大概的總結(jié)性的東西,雖然沒有詳細(xì)的展開(分享時口說唄,寫起來好累贅的樣子),但感覺對于理思路還是挺好的。

Basic Loggers Related(主要是Logger分類)

  • Apple System Logger
  • Standard output
  • standard error
  • File Logger
  • HTTP Server Logger
  • Telnet Server Logger
    • Telnet協(xié)議是TCP/IP協(xié)議族中的一員,是Internet遠(yuǎn)程登陸服務(wù)的標(biāo)準(zhǔn)協(xié)議和主要方式。它為用戶提供了在本地計算機(jī)上完成遠(yuǎn)程主機(jī)工作的能力。在終端使用者的電腦上使用telnet程序,用它連接到服務(wù)器。終端使用者可以在telnet程序中輸入命令,這些命令會在服務(wù)器上運(yùn)行,就像直接在服務(wù)器的控制臺上輸入一樣。
  • TCP Server Logger
  • UDP Server Logger
  • TCP Client Logger
  • UDP Client Logger
  • Onscreen Logging Overlay
  • Custom Loggers
  • Custom Logger fomatters

Basic Libraries Related(理清這幾個庫的關(guān)系)

  • _
  • _
    • XLFacility
    • GCDNetworking
      • GCDNetworking is a networking framework based on GCD available under a friendly New BSD License.
    • GCDWebServer
      • GCDWebServer is a modern and lightweight GCD based HTTP 1.1 server designed to be embedded in OS X & iOS apps.
    • GCDTelnetServer
      • GCDTelnetServer is a drop-in embedded Telnet server for iOS and OS X apps.
  • _
    • CocoaAsyncSocket
      • CocoaAsyncSocket provides easy-to-use and powerful asynchronous socket libraries for Mac and iOS. The classes are described below.
      • GCDAsyncSocket is a TCP/IP socket networking library built atop Grand Central Dispatch.
      • GCDAsyncUdpSocket is a UDP/IP socket networking library built atop Grand Central Dispatch.
      • 日志實(shí)現(xiàn)用了CocoaLumberjack
    • CocoaHTTPServerFMock工具用的這個
      • CocoaHTTPServer is a small, lightweight, embeddable HTTP server for Mac OS X or iOS applications.
      • 底層實(shí)現(xiàn)用了CocoaAsyncSocket
    • RoutingHTTPServer
      • A routing API for CocoaHTTPServer
      • 底層實(shí)現(xiàn)用了CocoaHTTPServer

Guide(演示內(nèi)容)

  1. XLFacility --> HTTPServer
    • http://127.0.0.1:8080
  2. XLFacility --> TelnetServer
    • telnet localhost 2323
  3. XLFacility --> Onscreen Logging Overlay
  4. CocoaLumberjack --> UDPClient
    • start udp server
    • test udp client logger
    • 下面是一個簡單的udp server代碼:
#!/usr/bin/env python
# UDP Echo Server -  udpserver.py
# code by www.cppblog.com/jerryma
import socket, traceback

host = '127.0.0.1'
port = 8888

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind((host, port))

while 1:
    try:
        message, address = s.recvfrom(8192)
        print "Got data from", address, ": ", message
        s.sendto(message, address)
    except (KeyboardInterrupt, SystemExit):
        raise
    except:
        traceback.print_exc()

看看別人怎么玩日志的

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,732評論 6 539
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,214評論 3 426
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,781評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,588評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,315評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,699評論 1 327
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,698評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,882評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,441評論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,189評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,388評論 1 372
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,933評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,613評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,023評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,310評論 1 293
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,112評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,334評論 2 377

推薦閱讀更多精彩內(nèi)容