ios 将Log日志重定向输出到文件中保存

对于真机,日志没法保存,不好分析问题。所以有必要将日志保存到应用的Docunment目录下,并设置成共享文件,这样才能取出分析。

首先是日志输出,分为c的printf和标准的NSLog输出,printf会向标准输出(sedout)打印,而NSLog则是向标准出错(stderr),我们需要同时让他们都将日志打印到一个文件中。

例子:

freopen("xx.log","a+",stdout);

freopen("xx.log","a+",stderr);

具体做法:

// 将NSlog打印信息保存到Document目录下的文件中

- (void)redirectNSlogToDocumentFolder

{

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

NSString *documentDirectory = [paths objectAtIndex:0];

NSString *fileName = [NSString stringWithFormat:@"dr.log"];// 注意不是NSData!

NSString *logFilePath = [documentDirectory stringByAppendingPathComponent:fileName];

// 先删除已经存在的文件

NSFileManager *defaultManager = [NSFileManager defaultManager];

[defaultManager removeItemAtPath:logFilePath error:nil];

// 将log输入到文件

freopen([logFilePath cStringUsingEncoding:NSASCIIStringEncoding], "a+", stdout);

freopen([logFilePath cStringUsingEncoding:NSASCIIStringEncoding], "a+", stderr);

}

此函数要在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

中调用,这个函数在AppDelegate.m中实现的。

/*******************************************************************************/

// 当真机连接Mac调试的时候把这些注释掉,否则log只会输入到文件中,而不能从xcode的监视器中看到。

// 如果是真机就保存到Document目录下的drm.log文件中

UIDevice *device = [UIDevice currentDevice];

if (![[device model] isEqualToString:@"iPad Simulator"]) {

// 开始保存日志文件

[self redirectNSlogToDocumentFolder];

}

/*******************************************************************************/

最后配置共享文件夹:

在应用程序的Info.plist文件中添加UIFileSharingEnabled键,并将键值设置为YES。将您希望共享的文件放在应用程序的Documents目录。一旦设备插入到用户计算机,iTunes 9.1就会在选中设备的Apps标签中显示一个File Sharing区域。此后,用户就可以向该目录添加文件或者将文件移动到桌面计算机中。如果应用程序支持文件共享,当文件添加到Documents目录后,应用程序应该能够识别并做出适当响应。例如说,应用程序可以将新文件的内容显示界面上。请不要向用户展现目录的文件列表并询问他们希望对文件执行什么操作。

就是说,一旦设备连接上电脑,可以通过iTune查看指定应用程序的共享文件夹,将文件拷贝到你的电脑上看。

参考连接:

1.http://hi.baidu.com/ios_zb_com/item/ea528f4a8b1100d8c1a59217

2.http://www.cnblogs.com/ThankForYou/archive/2012/09/12/2681739.html

时间: 2024-12-11 12:22:12

ios 将Log日志重定向输出到文件中保存的相关文章

iOS 将Log日志输出到文件中保存

对于那些做后端开发的工程师来说,看LOG解Bug应该是理所当然的事,但我接触到的移动应用开发的工程师里面,很多人并没有这个意识,查Bug时总是一遍一遍的试图重现,试图调试,特别是对一些不太容易重现的Bug经常焦头烂额.而且iOS的异常机制比较复杂,Objective-C的语言驾驭也需要一定的功力,做出来的应用有时候挺容易产生崩溃闪退.一遍一遍的用XCode取应用崩溃记录.解析符号,通常不胜其烦,有时还对着解析出来的调用栈发呆,因为程序当时的内部状态常常难以看明白,只能去猜测. 对于真机,日志没法

自定义log日志输出到文件中保存

程序调试日志,可以 通过printf直接输出到屏幕上面进行调试.在默写特定的情况下面,可以将日志保存到文件中,后期进行查阅调试. log.h //log.h #ifndef _ITCAST_LOG_H_ #define _ITCAST_LOG_H_ /* #define IC_NO_LOG_LEVEL 0 #define IC_DEBUG_LEVEL 1 #define IC_INFO_LEVEL 2 #define IC_WARNING_LEVEL 3 #define IC_ERROR_LEV

log日志重定向

1.重定向: 我们在使用NSLog(@"hahaha") 时,实质是将"hahaha"写入到一个系统默认位置的log文件中,然后控制台通过实时获取这个文件的内容进行显示打印信息. 但有时我们希望不需要链接xcode在手机上直接查看日志信息,这个时候我们就需要将log日志的位置调整到我们想要的指定位置. 好处: 这样调整的好处是我们可以自定义一个textview来读取log日志内容,通过某种方式触发(比如摇晃),来将实时的日志直接像是到手机上. 也可以通过后台接口上传

iOS及时log日志查看工具 (iConsole)

github下载地址:https://github.com/nicklockwood/iConsole 偶然看到的一个iOS及时log日志查看工具,通过该工具,我们可以在任何想看日志的时候,通过手势呼出log日志页,查看app的crash信息或者其他信息.另外,也可以通过查看代码的实现方式,学习在window中,响应手势,这样不管我们进入什么页面,都能呼出iConsole的页面. 希望通过此工具,对各位与iOS有关的朋友提供帮助. Purpose iConsole is a simple, pl

fprintf输出到文件中,sprintf输出到字符串中. 如: fprintf(fp,"%s",name); fp为文件指针 sprintf(buff,"%s",name); buff为字符数组

fprintf输出到文件中,sprintf输出到字符串中. 如: fprintf(fp,"%s",name); fp为文件指针 sprintf(buff,"%s",name); buff为字符数组 fprintf输出到文件中,sprintf输出到字符串中. 如: fprintf(fp,"%s",name); fp为文件指针 sprintf(buff,"%s",name); buff为字符数组

将Linux下编译的warning警告信息输出到文件中[整理笔记]

Linux中,脚本语言环境中,即你用make xxx即其他一些普通linux命令,比如ls,find等,不同的数字,代表不同的含义: 数字 含义 标准叫法0 标准输入  stdin = standard input1 标准输出  stdout = standard output2 标准错误输出  stderr = standard error 而系统默认的stdin,stdout,stderr,都是屏幕,所以,当你执行命令,比如make,后,所输出的信息,都是可以在屏幕上看到的.所以,想要将对应

Java的实验程序之输出单个文件中的前 N 个最常出现的英语单词

日期:2018.10.11 星期四 博客期:016 题目:输出单个文件中的前 N 个最常出现的英语单词,并输出到文本文件中 在程序运行之前,我试着先写了字符的字母的总结,加载代码如下: 1 //如下是第一个程序的 CharBasic文件 2 package src; 3 4 public final class CharBasic { 5 //检测字母是否为字母 6 public static boolean isAtoZ(char c){ 7 return c<='z'&&c>

Java课堂测试——输出单个文件中的前N个最常出现的英语单词

课堂测试一:输出某个英文文本文件中26字母出现的频率,由高到低排列,并显示字母出现的百分比,精确到小数点后面两位. HarryFre.java 1 package demo05; 2 3 import java.io.FileInputStream; 4 import java.io.IOException; 5 import java.io.InputStreamReader; 6 import java.text.DecimalFormat; 7 import java.util.Array

java log日志的输出。

在Spring框架中添加日志功能: pom.xml 1<dependency> 2 <groupId>log4j</groupId> 3 <artifactId>log4j</artifactId> 4 <version>1.2.17</version> 5</dependency> web.xml 1 <!-- 启动log --> 2 <servlet> 3 <servlet-n