打印log等内容到文件中, 追加

有需求,需要把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];
    NSString *fileName = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]
     stringByAppendingPathComponent:@"xxx.txt"];
    BOOL isExit = [file_manager fileExistsAtPath:fileName];
    if (!isExit) {
        [file_manager createFileAtPath:fileName contents:nil attributes:nil];
    }
    NSFileHandle *outFile = [NSFileHandle fileHandleForWritingAtPath:fileName];
    //找到并定位到outFile的末尾位置(在此后追加文件)
    [outFile seekToEndOfFile];
    NSString *bs = [NSString stringWithFormat:@"@"%@",\n", album.Img];
//    [[bs dataUsingEncoding:NSUTF8StringEncoding] writeToFile:fileName atomically:YES];
    [outFile writeData:[bs dataUsingEncoding:NSUTF8StringEncoding]];
    //关闭读写文件
    [outFile closeFile];


方法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 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值