`

(转)[IOS]将Log日志重定向输出到文件中保存

    博客分类:
  • IOS
log 
阅读更多

转自:https://www.cnblogs.com/Camier-myNiuer/p/4267426.html

 

 对于真机,日志没法保存,不好分析问题。所以有必要将日志保存到应用的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查看指定应用程序的共享文件夹,将文件拷贝到你的电脑上看。

分享到:
评论

相关推荐

    c++ 打印log 日志到文件

    本教程将深入探讨如何在C++中创建一个能够打印log到文件的系统,同时具备删除旧日志和设定日志文件大小的功能。 首先,我们需要理解日志的基本概念。日志通常包含程序运行过程中的信息,如错误信息、警告消息、调试...

    一种实时查看ios模拟器日志方法

    本文将介绍一种实时查看iOS模拟器日志的方法,该方法通过将日志重定向输出到文件中,并使用命令行工具如tail和grep等进行实时过滤查看。 首先,介绍日志重定向的基本思路。在iOS应用开发中,通常使用NSLog函数输出...

    iOS中日志同步获取NSLog重定向以及其他详解

    1. 重定向NSLog:可以通过修改_NSLOG宏或创建自定义的日志函数,将NSLog的输出重定向到自定义的文件或者网络中。这样,即使在真机上,也可以通过读取文件或监听网络来获取日志。例如,可以使用asl_open()函数创建一...

    ios 日志分享

    一种常见的方法是自定义日志记录器,将`NSLog`输出重定向到一个本地文件,如压缩包中提到的"nslogWriteFileTest"可能就是一个这样的测试用例。 创建一个本地日志文件可以使用以下步骤: 1. 在应用启动时初始化一个...

    iOS中捕获日志与异常示例详解

    在 iOS 中,捕获日志可以通过重定向 NSLog 输出到文件来实现。下面是一个简单的示例代码: ```objective-c - (void)redirectNSLogToDocumentFolder { // 判断当前是否在模拟器环境下,在模拟器不保存到文件中 ...

    VC跟踪调试TRACE输出的动态库库

    3. **重定向`TRACE`输出**:为了将`TRACE`信息导向我们定义的`OutputTraceToFile`函数,我们需要在`Preprocessor Definitions`中添加自定义的宏,例如`MY_TRACE_OUTPUT`,然后在源代码中替换`TRACE`的实现。...

    swift-log-json-std

    标题中的"swift-log-json-std"表明这是一个与Swift编程语言相关的日志处理工具,特别是它专注于将日志数据格式化为JSON并将其输出到标准输出(std)。 在描述中," :male_sign:‍:male_sign: 感谢的赞助。 该软件包...

    思科2600使用ADSL的配置(两种)

    - **ip nat inside source list 1 interface Dialer1 overload**:定义NAT源地址转换规则,使用访问控制列表1中的规则,将内部流量重定向到Dialer1接口。 ##### 路由配置 - **ip route 0.0.0.0 0.0.0.0 Dialer1**...

    禁用QQ实例

    ### 禁用QQ实例——基于Cisco IOS的FPM技术详解 #### 一、背景介绍 随着企业对网络安全管理的需求日益增强,对于员工工作时间使用即时通讯软件的行为控制变得尤为重要。其中,禁止员工使用QQ这类即时通讯软件成为了...

Global site tag (gtag.js) - Google Analytics