在pch文件中加入如下代码,重定义NSLog 输出格式为:文件名(行号) 打印信息
#ifdef DEBUG
# define NSLog(fmt, ...) do { \# define NSLog(...);
在application didFinishLaunchingWithOptions:中的第一行,加入如下三种方法的任意一个,即可将打印信息定向输入到文件
方法1, freopen([@"/tmp/my_logs.txt" fileSystemRepresentation], "w", stderr); 其中,第一个参数为日志文件的路径和文件名,可以由你自己设置,注意,这里存到了系统根目录下的tmp下。
方法2, [self redirectNSLog];
在appDelegate中定义如下方法:
- (BOOL)redirectNSLog {
// Create log file
[@"" writeToFile:@"/NSLog.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil];
id fileHandle = [NSFileHandle fileHandleForWritingAtPath:@"/NSLog.txt"];
if (!fileHandle)
NSLog(@"Opening log failed");
return NO;
[fileHandle retain];
// Redirect stderr
int err = dup2([fileHandle fileDescriptor], STDERR_FILENO);
if (!err)
NSLog(@"Couldn't redirect stderr");
return NO;
return YES;
}
方法3, [self redirectNSLogToDocumentFolder];
在AppDelegate中定义如下方法:
- (void)redirectNSLogToDocumentFolder{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *fileName =[NSString stringWithFormat:@"%@.log",[NSDate date]];
NSString *logFilePath = [documentsDirectory stringByAppendingPathComponent:fileName];
freopen([logFilePath cStringUsingEncoding:NSASCIIStringEncoding],"a+",stderr);
}
通过以上操作,通过打开或注释application didFinishLaunchingWithOptions:中的那一句话,即可以决定将日志写入文件还是输入到控制台。