如何在Objective-C中列印日誌記錄
在進行IOS程式設計的過程中,中會遇到這樣一個問題:如果在程式碼中寫了很多NSLog()函式,來確定程式的執行程式,當專案越寫越大,因NSLog帶來的末端輸出資訊會越來越多,這是已經很不難分清每個 NSLog函式在程式的那個位置了。因此,如果末端的輸出資訊中包含了這個NSLog()所在的上下文資訊,比如那個檔案中的哪個方法呼叫的,在哪一行等等,這樣就很明瞭了。
其實,C前處理器提供了很多關於當前檔案、行號或者功能資訊的標準巨集。而且,OC中的隱含引數_cmd會給出當前選擇的方法等資訊,如果在你的NSLog()中加入這些資訊,對於你除錯或者錯誤處理一定能提供有益的參考。
下面把最常用的巨集和表示式寫出來說明
上面兩張圖是我從蘋果開發文件上擷取的圖
英文已經講的很詳細了,下面我演示一下上面幾個函式的用法
- (void)viewDidLoad
{
[super viewDidLoad];
// [self addAView];
// [self addAButton];
NSMutableArray * array = [[NSMutableArray alloc]initWithCapacity:0];
NSLog(@"%s:%d someObject=%@", __func__, __LINE__, array);
[array addObject:@"iOS"];
NSLog(@"%s:%d someObject=%@", __func__, __LINE__, array);
}
執行後控制檯列印的結果為:
2014-01-23 15:55:40.814 test[2994:70b] -[ViewController viewDidLoad]:24 someObject=(
)
2014-01-23 15:55:40.815 test[2994:70b] -[ViewController viewDidLoad]:26 someObject=(
iOS
)
NSLog(@"\n%s",__FILE__);
/Users/****/Desktop/資料夾名稱/test/test/ViewController.m
NSLog(@"\n%@",[[NSStringstringWithUTF8String:__FILE__]lastPathComponent]);
ViewController.m
下面說一下我專案中的使用:
在應用的****-Prefix.pch檔案中有如下程式碼
//這個巨集是得出這段程式碼做對應的.m檔案
#define DEBUG_FILENAME [[[NSString stringWithUTF8String:__FILE__]
componentsSeparatedByString:@"/"] lastObject]
//DEBUG_NEW_FMT(fmt) 這個巨集是得到fmt這個物件所處的在哪個.m檔案下的哪個函式,並處在這個.m檔案的第幾行
#define DEBUG_NEW_FMT(fmt) \
[NSString stringWithFormat:@"%s(%@:%d) %@", \
__FUNCTION__, \
DEBUG_FILENAME, \
__LINE__, \
fmt]
//##__VA_ARGS__ 也是一個巨集(#define Macro(...) __VA_ARGS__),他的作用是支援可變引數,被省略的引數會被擴充套件成空串,作用和上面一樣,只是重新定義了NSLog()
#define DLog(fmt, ...) NSLog(DEBUG_NEW_FMT(fmt), ##__VA_ARGS__)
//列印空日誌,引數0為了消除編譯器的警告
#define DEBUG_LOG_NULL NSLog(DEBUG_NEW_FMT(@""),0)
//列印一個變數
#define DEBUG_LOG_VALUE(x, fmt) do { \
DEBUG_LOG(@#x " = " #fmt, x); \
} while(0)
相關文章
- 如何在專案中記錄日誌資訊?
- php日誌,記錄日誌PHP
- uni-app小程式(快手)日誌列印坑位記錄APP
- 日誌列印
- SwiftUI 如何在介面中print列印日誌log (EmptyView教程含原始碼)SwiftUIView原始碼
- 【Spring】日誌列印sql,日誌配置列印sqlSpringSQL
- NAS中如何檢視日誌記錄?
- 日誌記錄器
- ThinkPHP日誌記錄PHP
- Python 類的建構函式中初始化日誌記錄器後,導致日誌被重複列印Python函式
- Laravel sql 日誌記錄LaravelSQL
- secureCRT記錄操作日誌Securecrt
- 記錄日誌檔案
- PHP日誌記錄方法PHP
- oracle日誌操作記錄Oracle
- 如何在ABAP Netweaver和CloudFoundry裡記錄並檢視日誌Cloud
- 如何在 Linux 中管理日誌Linux
- 如何在程式碼中打日誌
- Unity——日誌列印工具Unity
- 日誌--列印規範
- Log 工具列印日誌
- 日誌記錄 PHP下往linux目錄下寫日誌PHPLinux
- Oracle補充日誌及日誌記錄規則Oracle
- db2不記錄日誌插入記錄DB2
- 記錄騰訊雲使用日誌
- 記錄 | 實習日誌 9
- mysql開啟日誌記錄MySql
- 記錄 sql 查詢日誌SQL
- SecureCRT自動記錄日誌Securecrt
- Appfuse:記錄操作日誌APP
- storm 問題日誌記錄ORM
- 第11章 日誌記錄
- linux_scritp_apache日誌中IP地址記錄LinuxApache
- 禁用 Logback 中特定類的日誌記錄
- 39,日誌列印sql 配置SQL
- MySQL列印死鎖日誌MySql
- 日誌到底該如何列印?
- mybatis列印sql日誌配置MyBatisSQL