iPhone: Sobald ich NSlog in eine Datei umgeleitet habe, wie kann ich sie in die Konsole zurückversetzen?

StackOverflow https://stackoverflow.com/questions/2103141

Frage

Ich benutze:

#if TARGET_IPHONE_SIMULATOR == 0
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *logPath = [documentsDirectory stringByAppendingPathComponent:@"console.log"];
    freopen([logPath cStringUsingEncoding:NSASCIIStringEncoding],"a+",stderr);
#endif

.. um NSLog zu einer Datei umzuleiten, die übrigens hervorragend funktioniert.

Ich möchte die Protokollierung vornehmen, um etwas einzureichen, den der Benutzer meiner App ein- und ausschalten kann. Weiß jemand, wie ich NSLog/Stderr umleiten kann der Rücken zur Konsole?

Vielen Dank!

War es hilfreich?

Lösung

Dies beantwortet Ihre Frage nicht ausdrücklich, aber wenn Sie nur noch weiterleiten müssen, ist die Ausgabe von NSLOG, dann würde ich in Betracht ziehen, einen Wrapper um NSLog () zu verwenden und dort zu entscheiden, ob ich an Datei sendet oder an normale NSLog/Stderr basierend auf einer Flag Sie behalten sich um, dass der Benutzer steuern kann.

(Es fühlt sich wie ein überraschendes Design für mich an, den Stderr-Stream grundlegend umzuleiten, um dies zu erreichen- und mit einem Wrapper über dem NSLog-Level könnten Sie genauso einfach die Ausgabe an beide Orte senden, wenn Sie jemals wollten.)

Andere Tipps

Dies wird von entnommenhttp://www.atomicbird.com/blog/2007/07/code-quickie-redirect-nslog

// Save stderr so it can be restored.
int stderrSave = dup(STDERR_FILENO);

// Send stderr to our file
FILE *newStderr = freopen("/tmp/redirect.log", "a", stderr);

NSLog(@"This goes to the file");

// Flush before restoring stderr
fflush(stderr);

// Now restore stderr, so new output goes to console.
dup2(stderrSave, STDERR_FILENO);
close(stderrSave);

// This NSLog will go to the console.
NSLog(@"This goes to the console");
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top