How to redirect the nslog output to file instead of console How to redirect the nslog output to file instead of console xcode xcode

How to redirect the nslog output to file instead of console


Step 1: Include following function in AppDelegate:

 - (void) redirectConsoleLogToDocumentFolder {       NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,                                                     NSUserDomainMask, YES);       NSString *documentsDirectory = [paths objectAtIndex:0];       NSString *logPath = [documentsDirectory stringByAppendingPathComponent:@"console.log"];       freopen([logPath fileSystemRepresentation],"a+",stderr); }

Step 2: Call this function at the start of function applicationDidFinishLaunchingWithOptions...

Thats it, Every NSLog() will now get redirected to this console.log file, which you can find in the documents directory.


Recently i have faced similar requirement and this is how i have done it.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{    // Override point for customization after application launch.    [self redirectConsoleLogToDocumentFolder];    return YES;}- (void) redirectConsoleLogToDocumentFolder{    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,                                                         NSUserDomainMask, YES);    NSString *documentsDirectory = [paths objectAtIndex:0];    NSString *logPath = [documentsDirectory stringByAppendingPathComponent:@"console.txt"];    freopen([logPath fileSystemRepresentation],"a+",stderr);} 

And Now if you want to this console to user

-(void)displayLog{    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);    NSString *documentsDirectory = [paths firstObject];    NSString *logPath = [documentsDirectory stringByAppendingPathComponent:@"console.txt"];    NSError *err = nil;    NSString *fileContents = [NSString stringWithContentsOfFile:logPath                                                       encoding:NSUTF8StringEncoding                                                          error:&err];    if (fileContents == nil) {        NSLog(@"Error reading %@: %@", logPath, err);    } else {        self.textView.text = fileContents;    }}


You may be interested in CocoaLumberjack. It is a very flexible logging framework for both Mac OS X and iOS. One logging statement can be sent not only to the console but to a file simultaneously. Plus it is actually faster then NSLog. I use it in a project that has common code for both OS X and iOS.