Xcode 自定义log
来源:互联网 发布:进口牛奶推荐 知乎 编辑:程序博客网 时间:2024/06/05 01:53
今天看到一个很好的自定义log,这里记录一下。
#ifdef DEBUG#define NSLog(FORMAT, ...) fprintf(stderr,"%s:%d\t %s\n",[[[NSString stringWithUTF8String:__FILE__] lastPathComponent] UTF8String], __LINE__, [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]);#else#define NSLog(FORMAT, ...) nil#endif
详细解释一下,备忘。
DEBUG模式下,打印日志,RELEASE模式下,不打印日志。
fprintf是一个打印的函数
stderr = Standard error stream 标准错误
如果出现了错误,需要在屏幕上输出错误日志。
%s -> [[[NSString stringWithUTF8String:__FILE__] lastPathComponent] UTF8String]
第一个参数 打印的是这个log所在的文件
%d -> __LINE__
第二个参数 打印的是行号
%s -> [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String])
第三个参数 打印的是具体的输出内容
示例:
NSLog(@"开始");打印的日志:FYPlayManager.m:547 开始
这个自定义log很有用,比如可以在看别人的代码时,控制台可能会有一些日志输出,用这个日志输出可以马上定位到代码位置,快速理解代码。
其他补充:
fprintf 、 printf 、sprintf 的区别:
printf就是标准输出,在屏幕上打印出一段字符串来。
sprintf就是把格式化的数据写入到某个字符串中。返回值字符串的长度。
fprintf是用于文件操作。
例如:int fprintf(FILE *stream,char *format,[argument]);
fprintf()函数根据指定的format(格式)发送信息(参数)到由stream(流)指定的文件.因此fprintf()可以使得信息输出到指定的文件。
stderr 、 stdin 、stdout的区别
当一个用户进程被创建出来时,系统会自动为这个进程创建3个数据流,就是stdin、stdout、stderr。
一个程序要运行,需要有输入、输出,如果出错,还要能表现出自身的错误。这是就要从某个地方读入数据、将数据输出到某个地方,这就够成了数据流。
一个进程初期所拥有的这么三个数据流,就分别是标准输出、标准输入和标准错误,分别用stdout, stdin, stderr来表示。。这3个文件分别为标准输入(stdin)、标准输出(stdout)、标准错误(stderr)。
大多数环境中,stdin指向键盘,stdout、stderr指向显示器。
之所以使用stderr,若因某种原因造成其中一个文件无法访问,相应的诊断信息要在该链接的输出的末尾才能打印出来。当输出到屏幕时,这种处理方法尚可接受,但如果输出到一个文件或通过管道输出到另一个程序时,就无法接受了。若有stderr存在,即使对标准输出进行了重定向,写到stderr中的输出通常也会显示在屏幕上。
标准输出和标准错误默认都是将信息输出到终端上,那么他们有什么区别呢?让我们来看个题目:
问题:下面程序的输出是什么?(intel笔试2011)
int main(){
fprintf(stdout,”Hello “);
fprintf(stderr,”World!”);
return0;
}
解答:这段代码的输出是什么呢?,然后发现输出是:
World!Hello
在默认情况下,stdout是行缓冲的,他的输出会放在一个buffer里面,只有到换行的时候,才会输出到屏幕。而stderr是无缓冲的,会直接输出,举例来说就是fprintf(stdout, “xxxx”) 和 fprintf(stdout,”xxxx\n”),前者会缓存,直到遇到新行才会一起输出。而fprintf(stderr, “xxxxx”),不管有没有\n,都输出。
stderr与stdout的区别
stdout(标准输出),输出方式是行缓冲。输出的字符会先存放在缓冲区,等按下回车键时才进行实际的I/O操作。
stderr(标准出错),是不带缓冲的,这使得出错信息可以直接尽快地显示出来。
关于缓冲的说明:
满缓冲 –> I/O操作只有在缓冲区被填满之后才会进行
有三种情况:1.缓冲区满 2.刷出数据 (fflush)3.关闭文件 (fclose)
行缓冲 –> 通常只有遇到换行符时,才会执行实际的I/O操作;但缓冲区满也会强制执行
行缓冲的情况:1.遇到换行符 2.缓冲区满 3.刷出数据 (fflush) 4.关闭文件 (fclose)
无缓冲 –> 不缓存,直接进行I/O操作 –> 直接输出
先写到这里,想到再补充。
- Xcode 自定义Log
- Xcode 自定义log
- 自定义Log
- 自定义Log
- 自定义log
- 自定义Log
- Xcode带颜色Log
- Xcode log输出中文
- xcode 自定义log日志(打印类名字,函数名和行数)
- xcode带颜色的log
- Xcode 输出多颜色Log
- android自定义log
- Android LOG标签自定义
- Android 自定义Log
- Android 自定义Log
- 自定义Android Log打印
- Android LOG标签自定义
- Android LOG标签自定义
- SpringMVC:No mapping found for HTTP request with URI [/account/*] in DispatcherServlet with
- 在Blender中通过法线贴图和顶点位移实现石块地面的凹凸感
- rabbitmq学习5:Topics
- spring websocket 使用@SendToUser
- Windows下使用grep命令(以及其它部分Linux命令)
- Xcode 自定义log
- 深入浅出 RecyclerView
- IDEA中文乱码
- iOS工程中开发环境和发布环境的切换
- spring框架简介
- JVM详解及优化
- PHP 判断字符串是否符合指定格式编码-mb_check_encoding
- mysql简单命令
- Tensorflow cifar模型源码