定向输出NSLog 到沙盒路径下

定向输出NSLog 到沙盒路径下

- (void)redirectConsoleLogToDocumentFolder

{

#ifdef DEBUG //只在调试时使用,不然在真机下也会输出到沙盒目录

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

    NSString *documentsDirectory = [paths objectAtIndex:0];

    //首先输出日志文件的路径,方便我们定位目录

    NSLog(@"log path:%@", documentsDirectory);

    

    //先删除上次输出的日志

    NSString *logFile = [[NSString alloc] initWithFormat:@"%@/log.txt", documentsDirectory];

    NSError *err;

    [[NSFileManager defaultManager] removeItemAtPath:logFile error:&err];

    

    //重定向NSLog输出

    NSString *logPath = [documentsDirectory stringByAppendingPathComponent:@"log.txt"];

    freopen([logPath fileSystemRepresentation], "a+", stderr);

#endif

}


在 Objective-C 中,可以通过重 `NSLog` 函数来将输出内容输出到指定文件中。具体操作如下: 1. 定义一个新的 `NSLog` 函数 ```objective-c void MyNSLog(NSString *format, ...) { va_list args; va_start(args, format); NSString *logStr = [[NSString alloc] initWithFormat:format arguments:args]; va_end(args); // 将输出内容入文件 NSString *filePath = @"文件路径"; NSFileHandle *fileHandle = [NSFileHandle fileHandleForWritingAtPath:filePath]; [fileHandle seekToEndOfFile]; [fileHandle writeData:[logStr dataUsingEncoding:NSUTF8StringEncoding]]; [fileHandle closeFile]; // 将输出内容输出到控制台 NSLog(@"%@", logStr); } ``` 在上面的代码中,首先定义了一个新的 `NSLog` 函数 `MyNSLog`。在这个函数中,首先将输入的格式化字符串格式化成一个字符串,然后将这个字符串入到指定的文件中。接着,调用系统的 `NSLog` 函数将这个字符串输出到控制台中。 2. 重定义 `NSLog` 函数 ```objective-c #define NSLog(...) MyNSLog(__VA_ARGS__) ``` 在上面的代码中,使用 `#define` 宏定义将 `NSLog` 函数重定义为新的 `MyNSLog` 函数。 使用以上两个步骤,就可以将 `NSLog` 的输出内容同时输出到指定文件和控制台中。需要注意的是,如果文件路径不存在,则需要先创建该文件。另外,如果需要在多个文件中使用这个新的 `NSLog` 函数,可以将上面的代码在一个公用的头文件中,然后在需要使用的文件中包含该头文件即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值