现在的位置: 首页 > 综合 > 正文

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

2018年08月03日 ⁄ 综合 ⁄ 共 2651字 ⁄ 字号 评论关闭

有需求,需要把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 = [[NSSearchPathForDirectori
esInDomains(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 fileHandleForWritingAtPa
th:fileName];
    //找到并定位到outFile的末尾位置(在此后追加文件)
    [outFile
seekToEndOfFile];

    NSString
*bs = [NSString stringWithFormat:@"@"%@",\n", album.Img];

//    [[bs
dataUsingEncoding:NSUTF
8StringEncoding] 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 }

抱歉!评论已关闭.