有需求,需要把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 }