iOS重定向输出打印(NSLog、printf)
注:本文是重定向日志输出到项目的其他模块,非重定向直接输出到文件。
在项目开发的时候,碰到一个很纠结的问题:因本人做的是iOS SDK层,同事做的是App层,因分工不同,在调试和修复Bug的时候需要提供明确清晰的日志。若把项目中的全部日志都输出到一个文件中,查找杂乱而繁琐,而我也只需要SDK层的日志,因此日志重定向到文件在此已不再合适(使用freopen重定向stdout、stderr输出路径即可,网上教程较多)。
因此个人根据需求分析之后,定义了2个宏:CLog、CPrintf(也可重写系统的NSLog,printf接口,在此为了不混淆系统接口和功能,自己重新定义了2个宏),再单独封装了一个单例类ZJLogSDK,提供一个代理回调给App层进行显示或保存。
#define CLog(...) [[ZJLogSDK sharedTool] sendLogStr:[NSString stringWithFormat:__VA_ARGS__]]
#define CPrintf(...) \
{\char cLogBuf[1024] = {0}; /*只支持1024个字节的输出(可自行调节大小)*/\snprintf((char *)cLogBuf, sizeof(cLogBuf), __VA_ARGS__); /*将格式字符串和可变参数列表保存到cLogBuf中*/\CPrintfCallback(cLogBuf); /*此函数定义在只包含c变量和接口的头文件中,实现在m文件中,从而进行oc接口的调用*/\
};
大致思路如下,具体代码可下载下文中的Demo查看:
CLog:实现相对比较简单,只要把输出格式字符串和可变参数列表用NSString再进行格式化为字符串即可。
CPrintf:需要先使用snprintf将格式字符串和可变参数列表进行字符串拼接操作,之后再通过连接到单例ZJLogSDK中进行输出或打印。
我写了一个简单的Demo,有兴趣可以看下,文件功能内容如下:
ZJLogSDK(h、mm):主体部分,包括代理设置、日志总开关、日志上报开关,在此用mm后缀可兼容m、mm(C++类)两种OC文件使用CLog,若使用m后缀则在mm文件中无法使用;
ZJLogSDKExt(h):即ZJLogSDK类的扩展,主要是实现单例和封装外部不可访问的接口和变量(若不需要单独封装,可将内容合并到ZJLogSDK.h中);
ZJLogPrintf(h):CPrintf宏的定义窗口,主要是为C文件使用CPrintf做接口;
ZJLogBridgeC(h、m):此唯一目的就是桥接C和OC之间的接口,调用路径为CPrintf->CPrintfCallback->ZJLogSDK。
iOS重定向输出打印(NSLog、printf)相关推荐
- ios nslog 例子_IOS 打印 NSlog 使用
NSLog的定义 void NSLog(NSString *format, -); 基本上,NSLog很像printf,同样会在console中输出显示结果.不同的是,传递进去的格式化字符是NSStr ...
- php 输出方法,PHP输出打印方法
PHP输出打印方法 1. echo()输出字符串,PHP允许我们在双引号串中直接包含字串变量,而单引号串中的内容总被认为是普通字符. 2. mixed print_r ( mixed $express ...
- php变量原格式输出,PHP格式化输出打印变量
PHP 常用的输入变量函数print_r,但是输出没有换行,看起来很费力 我们可以自定义一个函数来实现变量的格式化输出,代码如下: function dump($vars, $label = '', ...
- 格式化输出的函数printf()用法
功能:格式化输出函数, 一般用于向标准输出设备按规定格式输出信息. 调用格式为:printf("格式化字符串", 参量表); 格式化字符串包括两部分内容: 一部分是正常字符, 这些 ...
- 【linux笔记】vi和vim编辑器,重定向输出,系统命令,进程,管道
vi/vim 在linux下一般使用vi编辑器来编辑文件 Vi既可以查看文件也可以编辑文件. 三种模式: 命令行.插入.底行模式 切换到命令行模式:ESC键 切换到插入模式:按i,o,a键 切换到底行 ...
- python 将输出打印到文件
python 将输出打印到文件 import os import sys temp = sys.stdout f = open('test.txt','w') print('1111111111') ...
- 2021.07.11 【ABAP随笔】采购订单Message输出打印
Title 采购订单Message输出打印 很多业务中需要在完成订单的时候来进行单据打印的输出操作,比如新建采购订单的时候,需要输出采购订单的PDF或者使用邮件功能来将采购订单发送给制定人员 SAP ...
- python一行输出多个数据_如何在Python中让两个print()函数的输出打印在一行内?
1.两个连续的print()函数为什么在输出时内容会分行显示? 解:print()中有两个默认参数sep和end,其中sep是代替分隔符,end是代替末尾的换行符,默认使用','代替空格,且默认末尾加 ...
- Linux重定向输出日志
作者:翁松秀 Linux重定向输出日志 重定向类型 0:标准输入. 1:标准输出. 2:错误信息输出. 2>&1:将错误信息重定向到标准输出. 重定向格式 1,./spark-submi ...
最新文章
- java导出模板 pdf设置字体_有哪些相见恨晚的PPT模板网站?
- OpenCV | OpenCV中cvgoodFeaturesToTrack函数详细注释
- Python OS和shutil模块的常见方法
- hive - 自定义函数(超详细步骤,手把手的交)
- 华为再获90天“临时许可证” 可继续维护客户
- 计算机配件的真假辨伪,专家教你辨真伪 “火眼金睛”辨真假配件
- linux内核编译ccflag,Linux内核模块编译失败
- spring+mybatis通用dao层、service层的实现
- linux添加ipv6默认路由表,IPv6及静态路由配置
- 如何在Pages for Mac中添加页眉、页脚和页码?
- Java微服务系统项目技术栈总结
- Excel 快速填充序号
- kindle使用参考
- 解决Source Not Found问题
- 手机屏幕分辨率说明大全 VGA - hd
- 怎样开启SQL数据库服务
- 华硕电脑笔记本台式机预装专用系统 V2011
- 微信小程序:紫色特别舒服的UI趣味测试微信小程序
- 奖金711万!这位“山东宝妈”破解美国运算100万年才可能解开的密码!
- 《SQL必知必会》第六课 用通配符进行过滤 使用LIKE操作符,%、[]、_通配符进行通配搜索