OC IOS 自定义Log日志 附:常用输出宏

事情的起因

本人喜欢使用log日志查看代码的运行状况,但是由于忘记删除或者是留着备用导致运行代码的时候经常会莫名其妙的跳出一行log日志,时间太长都不知道是那个类输出的,方便过后造成阅读日志的困难,想找到删除又需要一个类一个类的寻找,非常浪费时间,于是想到了自定义log,输出的时候顺便把类名和方法名输出出来 ,这样即便以后忘记删除也可以很方便的将它找出来
下面是经过优化后的NSLog输出内容:

最终的结果

行号:97 时间:15:07:31 文件名:ViewController.m  方法名:-[ViewController viewDidLoad]
bilibili
行号:98 时间:15:07:31 文件名:ViewController.m  方法名:-[ViewController viewDidLoad]
哔哩哔哩

附上NSLog的宏定义:

#define NSLog(FORMAT, ...) fprintf(stderr,"行号:%d 时间:%s 文件名:%s\t方法名:%s\n%s\n", __LINE__,__TIME__,[[[NSString stringWithUTF8String:__FILE__] lastPathComponent] UTF8String],__func__, [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String])

之间的过程

额 ..看起来有点长,或许第一眼看上去有点乱,如果想要自定义这个宏需要下面的知识

#define

表示声明一个宏定义, 宏定义的作用就是使用一些简单的字符来代替复杂的字符(个人理解,当然还有更多作用,详情请百度!); 这里的作用就是把fprintf(stderr,"行号:%d 时间:%s 文件名:%s\t方法名:%s\n%s\n", __LINE__,__TIME__,[[[NSString stringWithUTF8String:__FILE__] lastPathComponent] UTF8String],__func__, [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]) 这么一大串换成NSLog(FORMAT, ...) 这样在代码中输入NSLog(FORMAT, ...) 编译的时候系统会自动将这行代码替换成上面的一大串代码来运行

NSLog(FORMAT,…)

这个可以看做是一个代替后面代码串的变量,括弧中的FORMAT是一个参数 可以改变这个参数,后面的代码串可以调用这个参数 使用的时候就可以这样NSLog(@”bilibili”); 后面的…表示可以接受更多的参数 比如这样NSLog(@”bilibili%@%d”,哔哩哔哩,1);

那一大串

fprintf(stderr,)是C的一个输出log方法,OC是基于C的 所以内部一样.stderr是一个指针,用于指示打印输出位置,
至于%d %s 表示占位符,不懂的可以度娘一下 \t代表tab 输出一个空行\n表示换行
后面的参数是OC中的一些常用输出宏:
__FILE__:表示当前文件所在的路径
__TIME__:表示log打印时间
__LINE__:表示当前代码行
__func__:表示log所在的方法名称
__VA_ARGS__:是一个可变参数宏,用于接收可变输出参数

所以 这里的意思就是:
输出到本地控制台:行号:__LINE__ 时间:__TIME__ 文件名:__FILE__ 方法名:__func__ + 换行 + 想要输出的内容;
fprintf(stderr,”行号:%d 时间:%s 文件名:%s\t方法名:%s\n%s\n”, LINE,TIME,[[[NSString stringWithUTF8String:FILE] lastPathComponent] UTF8String],func, [[NSString stringWithFormat:FORMAT, ##VA_ARGS] UTF8String])

在使用的时候,可以新建一个PCH头文件将以下代码包含进去替换系统的NSLog方法

#ifdef DEBUG
#define NSLog(FORMAT, ...) fprintf(stderr,"时间:%s 行号:%d 文件名:%s\t方法名:%s\n%s\n", __TIME__,__LINE__,[[[NSString stringWithUTF8String:__FILE__] lastPathComponent] UTF8String],__func__, [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String])
#else
#define NSLog(FORMAT, ...) nil
#endif

这样就可以替换原有的系统log,而使用自定义的log了,非调试模式就不会再输出了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值