iOS学习笔记40-日志重定向
一、日志重定向
我们在iOS开发过程中,我们时常会使用NSLog
打印到控制台的日志信息进行代码调试,但这样调试的前提是连接上Xcode。
如果进行真机调试但同时又不能连接Xcode的时候,就不能直接在xcode的控制台查看输出日志了,但是程序还是会执行那些Log的,如果要查看这些日志,我们就需要把输出日志信息保存到文件中,然后进行查看。
标准NSLog
的打印默认是往标准错误(stderr
)进行打印的,我们只需要修改NSLog
的打印输出路径即可实现日志重定向
以下是日志重定向代码:
#pragma mark - 用户方法,将NSLog的输出信息写入到文件中
/* 将NSlog打印信息保存到Document目录下的文件中 */
- (void)redirectLogToDocumentFolder
{
// 获取沙盒路径
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
NSString *documentDirectory = [paths objectAtIndex:0];
// 获取打印输出文件路径
NSString *fileName = [NSString stringWithFormat:@"myData.log"];
NSString *logFilePath = [documentDirectory stringByAppendingPathComponent:fileName];
// 先删除已经存在的文件
NSFileManager *defaultManager = [NSFileManager defaultManager];
[defaultManager removeItemAtPath:logFilePath error:nil];
// 将NSLog的输出重定向到文件,因为C语言的printf打印是往stdout打印的,这里也把它重定向到文件
freopen([logFilePath cStringUsingEncoding:NSASCIIStringEncoding],"a+", stdout);
freopen([logFilePath cStringUsingEncoding:NSASCIIStringEncoding],"a+", stderr);
}
在AppDelegate
的application:didFinishLaunchingWithOptions:
中调用:
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// 重定向Log日志信息到Document文件中
[self redirectLogToDocumentFolder];
return YES;
}
到这里还没结束,因为你的Log日志信息已经打印到了真机应用的沙盒文件中,你还需要把它拷贝到你的Mac上进行查看,你就需要设置共享文件配置 :
在应用程序的
Info.plist
文件中添加UIFileSharingEnabled
键,并将键值设置为YES
。
一旦iOS设备插入到用户计算机,iTunes就会在选中设备的Apps标签中显示一个文件分享区域。设置了文件共享后,用户就可以向该目录添加文件或者将文件移动到桌面计算机中。就是说,设置了文件共享后,一旦设备连接上电脑,可以通过iTune查看指定应用程序的共享文件夹,将文件拷贝到你的电脑上看。
二、文件流知识补充
1. 打开文件
FILE *fp = fopen(文件路径,打开方式);
打开方式:
r
: 读,如果文件不存在返回NULL,存在就打开w
: 写,如果文件存在则覆盖,不存在则创建a
: 追加,如果文件存在则追加,不存在则创建r+
: 在r
的基础上,多增加了写的权限w+
: 在w
的基础上,多增加了读的权限a+
: 在a
的基础上,多增加了读的权限t
: 文本文件(默认的),结合有rt、wt、at、rt+b
: 二进制文件,结合有rb、wb、ab、rb+
2. 文件操作
char ch = fgetc(文件指针);
作用:从文件中读取一个字符
【fgetc和getc没有区别,用法也一样】fputc(字符,文件指针);
作用:写入一个字符到文件fgets(字符数组,长度n,文件指针);
作用:从文件指针指向的文件中读取n-1个字符存到字符数组里,会自动在后面加\0,字符数组用来保存你读取出来的字符串
【遇到“\n”立即结束读取】fputs(字符串,文件指针);
作用:写入一个字符串到文件指针指向的文件fread(保存数据的首地址,每块的大小,多少块,文件指针);
作用:从文件指针指向的文件中分块读取(文件指针),告诉它一次读取多少块(多少块),每块多大(第二个参数),存到哪(第一个参数)
【它只关心具体读的字节数,不会关心这些自己里面有没有换行 】fwrite(数据的首地址,每块的大小,多少块,文件指针);
作用:将数据分块写入到文件指针指向的文件。第一个是告诉系统,写入什么数据,第二个是告诉系统每块多少字节,第三个是告诉系统分多少块写入,第四个是写入到哪个文件fscanf(文件指针,格式化控制符,地址列表);
作用:格式化读取fprintf(文件指针,格式化控制符,参数列表);
作用:格式化写入freopen(文件路径path, 打开方式mode, 文件指针fp);
作用:实现重定向,把预定义的标准流文件定向到由path指定的文件中。标准流文件具体是指stdin
、stdout
和stderr
。其中stdin
是标准输入流,默认为键盘;stdout
是标准输出流,默认为屏幕;stderr
是标准错误流,一般把屏幕设为默认。
3. 关闭文件
fclose(文件指针);
iOS学习笔记40-日志重定向的更多相关文章
- iOS学习笔记-自己动手写RESideMenu
代码地址如下:http://www.demodashi.com/demo/11683.html 很多app都实现了类似RESideMenu的效果,RESideMenu是Github上面一个stars数 ...
- iOS学习笔记20-地图(二)MapKit框架
一.地图开发介绍 从iOS6.0开始地图数据不再由谷歌驱动,而是改用自家地图,当然在国内它的数据是由高德地图提供的. 在iOS中进行地图开发主要有三种方式: 利用MapKit框架进行地图开发,利用这种 ...
- iOS学习笔记——AutoLayout的约束
iOS学习笔记——AutoLayout约束 之前在开发iOS app时一直以为苹果的布局是绝对布局,在IB中拖拉控件运行或者直接使用代码去调整控件都会发上一些不尽人意的结果,后来发现iOS在引入了Au ...
- IOS学习笔记25—HTTP操作之ASIHTTPRequest
IOS学习笔记25—HTTP操作之ASIHTTPRequest 分类: iOS2012-08-12 10:04 7734人阅读 评论(3) 收藏 举报 iosios5网络wrapper框架新浪微博 A ...
- IOS学习笔记之关键词@dynamic
IOS学习笔记之关键词@dynamic @dynamic这个关键词,通常是用不到的. 它与@synthesize的区别在于: 使用@synthesize编译器会确实的产生getter和setter方法 ...
- iOS学习笔记-精华整理
iOS学习笔记总结整理 一.内存管理情况 1- autorelease,当用户的代码在持续运行时,自动释放池是不会被销毁的,这段时间内用户可以安全地使用自动释放的对象.当用户的代码运行告一段 落,开始 ...
- iOS学习笔记10-UIView动画
上次学习了iOS学习笔记09-核心动画CoreAnimation,这次继续学习动画,上次使用的CoreAnimation很多人感觉使用起来很繁琐,有没有更加方便的动画效果实现呢?答案是有的,那就是UI ...
- iOS学习笔记总结整理
来源:http://mobile.51cto.com/iphone-386851_all.htm 学习IOS开发这对于一个初学者来说,是一件非常挠头的事情.其实学习IOS开发无外乎平时的积累与总结.下 ...
- iOS学习笔记之Category
iOS学习笔记之Category 写在前面 Category是类别(也称为类目或范畴),使用Category,程序员可以为任何已有的类添加方法.使用类别可以对框架提供的类(无法获取源码,不能直接修改) ...
随机推荐
- MFC【exe】工程中的文件大致信息(翻译的)
在工程文件夹中有个readme文件,下面是翻译过来的. ======================================================================== ...
- [机器学习] 简单的机器学习算法和sklearn实现
机器学习基础算法理解和总结 KNN算法 理解 KNN其实是最好理解的算法之一,其实就是依次和空间中的每个点进行距离比较,取距离最近的N个点,看这N个点的类别,那么要判断的点的类别就是这N个点中类别占比 ...
- 使用ErrorProvider组件验证文本框输入
实现效果: 知识运用: ErrorProvider组件的BlinkStyle属性 //指示错误图标的闪烁时间 public ErrorBlinkStyle BlinkStyle{ get;set; } ...
- Python面向对象进阶(二)
Python面向对象进阶2.html :first-child{margin-top:0!important}img.plugin{box-shadow:0 1px 3px rgba(0,0,0,.1 ...
- 【转】树莓派3代3.5寸触摸屏驱动的安装(通过ssh安装)
这是用到的配件的树莓派3代 烧录好系统后,启动的树莓派,我的树莓派已经在一开始通过路由器和局域网,登陆了ssh,设置好了开机就能自动连接到电脑的360wifi,所以无论到哪 里,只要自己的笔记本电脑还 ...
- session添加登录次数限制
session 中设置了生存期,20分钟,输入密码错误次数保存到session 中,过一段时间自动解除: //登陆的用户名或者密码出错次数 int n = 0; if(logintimes == nu ...
- SQL学习总结笔记
SQL语句的效率不仅是sql语句的设计还有一些其他的原因比如网络 .是否有视图.是否有索引等等.这里主要描述的是我个人对于sql设计方面优化的一些见解: 首先要说明一下的是数据库SQL解析顺序: (1 ...
- Oracle 闪回 找回数据的实现方法
Oracle 闪回 找回数据的实现方法 闪回技术是Oracle强大数据库备份恢复机制的一部分,在数据库发生逻辑错误的时候,闪回技术能提供快速且最小损失的恢复.这篇文章主要介绍了Oracle 闪回 找回 ...
- lua调用java过程
在cocos2dx框架中,有继承好的luaj文件来方便我们去使用lua调用java底层代码,注意:luaj只能使用在安卓平台下,如果在平台下使用,会出错, 所以使用前需要加平台判断,方法 如下: lo ...
- VueX源码分析(4)
VueX源码分析(4) /module store.js /module/module.js import { forEachValue } from '../util' // Base data s ...