Xcode中OC和Swift自定義log打印信息

在開(kāi)發(fā)過(guò)程中戳杀,打印Log進(jìn)行調(diào)試是必不可少的,但是在上線(xiàn)之后這些Log會(huì)很消耗性能資源夭苗,同時(shí)我們又想在Log中顯示更詳細(xì)的信息信卡,在Debug模式下打印,在Release模式下不打印题造。接下來(lái)就來(lái)說(shuō)一下在OC和Swift中來(lái)是如何實(shí)現(xiàn)這個(gè)功能的傍菇。

OC中自定義Log打印信息

在OC中我們可以使用宏定義來(lái)設(shè)置工程Debug模式下打印log,Release模式下不打印Log界赔,通常我們會(huì)定義在PCH文件中(點(diǎn)擊查看如何創(chuàng)建PCH文件)丢习。

//自定義Log輸入日志+顯示行號(hào)

#ifdef DEBUG  //在調(diào)試模式下
#define MYLog(fmt, ...) NSLog((@"[Line-%d] %s " fmt), __LINE__, __PRETTY_FUNCTION__,  ##__VA_ARGS__)

#else  //Release模式下
#define MYLog(...)
#endif  // #ifdef   需要 #endif 結(jié)束

Debug和Release的切換用來(lái)控制MYLog的日志輸出

切換DEBUG模式

如上圖切換到Release即可取消在PCH文件中定義的MYLog的輸入日志。

func MYLog<T> (message: T, fileName: String = #file, funcName: String = #function, lineNum: Int = #line) {
    
    #if DEBUG
        
        let file = (fileName as NSString).lastPathComponent
        
        print("\(file):\(funcName):\(lineNum):\("打印內(nèi)容"):\(message)")
        
        
        
    #endif
    
}

Swifit中自定義Log打印信息

使用Swift我們發(fā)現(xiàn)淮悼,它的特性已經(jīng)不再具備像OC那樣的宏咐低,所以我們不能像上面那樣設(shè)置了,但我們可以通過(guò)下面的方式來(lái)實(shí)現(xiàn)和上面一樣的功能袜腥。

首先见擦,我們需要通過(guò)定義全局函數(shù)的形式來(lái)實(shí)現(xiàn)讓所有的類(lèi)都能調(diào)用。

import UIKit

@UIApplicationMain

class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?    
    
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        //調(diào)用自定義Log
        MYLog(message: "Hello")
        return true
    }
}

/// 自定義Log打印
///
/// - Description:
///     考慮到自定義Log要打印方法所在的文件/方法名/行號(hào)羹令,以及自定義的內(nèi)容鲤屡,同時(shí)考慮調(diào)用的便捷性,所以要使用默認(rèn)參數(shù)(fileName: String = #file)福侈,因此無(wú)需調(diào)用者傳遞太多的參數(shù)酒来。
///     T 使用泛型,可以讓調(diào)用者傳遞任意的類(lèi)型肪凛,進(jìn)行打印Log的操作堰汉。
/// - Parameters:
///   - message: 需要打印的內(nèi)容
///   - fileName: 當(dāng)前打印所在文件名 使用#file獲取
///   - funcName: 當(dāng)前打印所在方法名 使用#function獲取
///   - lineNum: 當(dāng)前打印所在行號(hào)   使用#line獲取
func MYLog<T> (message: T, fileName: String = #file, funcName: String = #function, lineNum: Int = #line) {
    
    #if DEBUG
        
        let file = (fileName as NSString).lastPathComponent
        
        print("-\(file) \(funcName)-[\(lineNum)]: \(message)")
        
    #endif

}

這里需要說(shuō)明一下,在Swift中显拜,全局函數(shù)的概念是衡奥,將函數(shù)定義在任意一個(gè)文件的class外面爹袁,這樣即可在項(xiàng)目的任何地方都可以調(diào)用這個(gè)方法远荠。這里我們可以寫(xiě)在AppDelegata.swift的class{}外面,也可以單獨(dú)建立一個(gè)Swift文件失息,將MYLog方法寫(xiě)到里面譬淳。

另外档址,考慮到要在Debug模式下進(jìn)行打印,而在Release模式下不需要進(jìn)行打印邻梆。我們?cè)诖a中使用到了#if DEBUG #endif守伸。由于Swift中沒(méi)有宏定義的概念,所以需要在項(xiàng)目的Build Settings->Other Swift Flags中為Debug添加一個(gè)標(biāo)記,例如"-D DEBUG"浦妄。

添加DEBUG標(biāo)示

這樣尼摹,就可以在上面的代碼中,直接通過(guò)"DEBUG"這個(gè)關(guān)鍵詞剂娄,來(lái)判斷當(dāng)前的運(yùn)行環(huán)境是否為Debug模式蠢涝。


到這里即可像文章開(kāi)頭那樣,切換到DEBUG模式即可顯示Log打印信息阅懦,而在Release模式下不打印和二。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市耳胎,隨后出現(xiàn)的幾起案子惯吕,更是在濱河造成了極大的恐慌,老刑警劉巖怕午,帶你破解...
    沈念sama閱讀 219,039評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件废登,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡郁惜,警方通過(guò)查閱死者的電腦和手機(jī)钳宪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)扳炬,“玉大人吏颖,你說(shuō)我怎么就攤上這事『拚粒” “怎么了半醉?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)劝术。 經(jīng)常有香客問(wèn)我缩多,道長(zhǎng),這世上最難降的妖魔是什么养晋? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任衬吆,我火速辦了婚禮,結(jié)果婚禮上绳泉,老公的妹妹穿的比我還像新娘逊抡。我一直安慰自己,他們只是感情好零酪,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布冒嫡。 她就那樣靜靜地躺著拇勃,像睡著了一般。 火紅的嫁衣襯著肌膚如雪孝凌。 梳的紋絲不亂的頭發(fā)上方咆,一...
    開(kāi)封第一講書(shū)人閱讀 51,692評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音蟀架,去河邊找鬼瓣赂。 笑死,一個(gè)胖子當(dāng)著我的面吹牛片拍,可吹牛的內(nèi)容都是我干的钩述。 我是一名探鬼主播,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼穆碎,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼牙勘!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起所禀,我...
    開(kāi)封第一講書(shū)人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤方面,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后色徘,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體恭金,經(jīng)...
    沈念sama閱讀 45,782評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評(píng)論 3 337
  • 正文 我和宋清朗相戀三年褂策,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了横腿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,102評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡斤寂,死狀恐怖耿焊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情遍搞,我是刑警寧澤罗侯,帶...
    沈念sama閱讀 35,790評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站溪猿,受9級(jí)特大地震影響钩杰,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜诊县,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 331
  • 文/蒙蒙 一讲弄、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧依痊,春花似錦避除、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)钳枕。三九已至缴渊,卻和暖如春赏壹,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背衔沼。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工蝌借, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人指蚁。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓菩佑,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親凝化。 傳聞我的和親對(duì)象是個(gè)殘疾皇子稍坯,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355

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