2017-01-29 7 views
0

Für eine iPhone App muss ich Debugging-Daten in einer Datei sammeln, um sie zur Analyse an einen Online-Dienst zu senden. Dies funktioniert gut, indem Sie die stderr Ausgabe in ein Datei-Handle umleiten und die Datei bei Bedarf senden. (NSLog Ausgabe endet auch in stderr, so dass dies auf der ganzen Linie funktioniert.) Die gleiche Methode funktioniert auch gut mit stdout.Swift stderr und stout in eine Datei

Hier ist, wie ich das Speichern in eine Datei zu tun:

freopen(cStringFilePath, "a+", stderr) // or stdout 

Die oben richtig ein UnsafeMutablePointer<FILE> zurück, die ich verfolgen, um die Datei bei Bedarf zu schließen.

Allerdings würde ich den Inhalt der beiden stdout und stderr in eine Datei, müssen mit der richtigen zeitlichen Abfolge zeilen.

Der Grund dafür ist, dass ich einen Dritten Rahmen zu debuggen versuchen, den Diagnoseausgang erzeugt, sondern es stdout eher zu stderr schreibt.

Irgendeine Idee, wie man das erreicht?

Antwort

2

Haben Sie versucht, einfach freopen zweimal anzurufen? Einmal mit stderr und einmal mit stdout? Ich denke, das hat für meine Zwecke gut funktioniert, als ich es versuchte.

+0

Nein, es scheint, dass es nur die zuletzt verwendete erfassen wird. – Mundi

+0

Korrektur. Es scheint zu funktionieren. Beeindruckend. Aber ist es sicher? Was passiert, wenn beide Streams gleichzeitig auf die Datei zugreifen? – Mundi

+0

Ja, es sollte "sicher" sein, d. H. Es sollte nicht abstürzen, aber Sie können Ausgabe Interleaved wegen der Pufferungsregeln erhalten. Ich denke, Sie können ändern, wie Pufferung auf diesen Dateideskriptoren passiert, aber ich bin mir nicht sicher, wie es von ganz oben ist. –