本文共 2945 字,大约阅读时间需要 9 分钟。
有需求,需要把log文件打印到文件中进行转存,或者上传到服务器, 代码如下:
(要打印的内容为NSString)
方法1. 成功打印,但要注意下面这种方式会不断地打开这个文件,然后不断地关闭文件,(在正常的代码中,应该是打开一次,关闭一次即可,因为打开和关闭文件流的操作是很费时的。)
#define recordFilePath (@"/Users/heqin/Desktop/recordRequstTimeLast.log")
NSDate *curDate = [NSDate date];
NSTimeInterval lastTimeLength = [curDate timeIntervalSinceDate:requestHappenDate];
NSString *resultString = [NSString stringWithFormat:@"%@, interval=%f, success=%@", [request.url path], lastTimeLength, success?@"YES":@"NO"];
FILE *file = fopen([recordFilePath UTF8String], [@"ab+"UTF8String]);
if (file != NULL) {
fseek(file, 0, SEEK_END);
}
NSData *resultData = [resultString dataUsingEncoding:NSUTF8StringEncoding];
int readSize = [resultData length];
fwrite((const void *)[resultData bytes], readSize, 1, file);
fclose(file);
方法2.(这种方法看起来似乎更接近OC代码)
NSFileManager *file_manager = [NSFileManager defaultManager];
//
方法3.
- (NSString*)logFilePath { 2 //非越狱版路径 3 #ifndef CRACK 4 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 5 NSString *documentsDirectory = [paths objectAtIndex:0]; 6 //越狱版路径 7 #else 8 NSString *documentsDirectory = @"/var/root/Media/xiaodao/"; 9 #endif 10 NSString *logDir = [documentsDirectory stringByAppendingPathComponent:@"logs"]; 11 BOOL isDir = YES; 12 //如果logs文件夹存不存在,则创建 13 if([[NSFileManager defaultManager] fileExistsAtPath:logDir isDirectory:&isDir] == NO) 14 { 15 [[NSFileManager defaultManager] createDirectoryAtPath:logDir withIntermediateDirectories:YES attributes:nil error:nil]; 16 } 17 //以当天的时间为文件名,文件名后缀为.log 18 NSString *fileName =[NSString stringWithFormat:@"%@.log",[NSDate date]]; 19 NSString *logPath = [logDir stringByAppendingPathComponent:fileName]; 20 return logPath; 21 }
// 开始打印
- (void)startLog { 2 freopen([[self logFilePath] cStringUsingEncoding:NSASCIIStringEncoding],"a+",stderr); 3 } freopen重定向打印 stderr为标准出错信息 // 关闭日志 - (void)finishLog { 2 fflush(stderr); 3 dup2(dup(STDERR_FILENO), STDERR_FILENO); 4 close(dup(STDERR_FILENO)); 5 } // 删除日志 - (BOOL)deleteLogFile { 2 BOOL success = [[NSFileManager defaultManager] removeItemAtPath:[self logFilePath] error:nil]; 3 return success; 4 }
转载地址:http://uxwpi.baihongyu.com/