2012-10-27 6 views
16

Früher konnte ich alle stdout/stderr Daten von Anwendungen in Console.app lesen. Seit einiger Zeit ist dies nicht mehr der Fall (NSLog-Daten sind jedoch immer noch vorhanden). Ich bin jetzt auf 10.8.Wie bekomme ich stdout in Console.app

Es gab eine earlier similar question from 2010, die nicht mehr auf dem neuesten Stand zu sein scheint.

Auf SU gibt es auch eine similar question, die noch nicht beantwortet wurde.

Wurde das geändert, d.h. stdout sollte nicht mehr angemeldet sein? Oder ist etwas an meinem System kaputt (von der alten SU-Frage, es klang so, als ob das der Fall wäre - obwohl ohne hilfreich zu sein)?

Kann ich es irgendwie zurück ändern?

Antwort

15

Vor Mountain Lion wurden alle von launchd verwalteten Prozesse, einschließlich regulärer Anwendungen, mit ihren stdout- und stderr-Dateideskriptoren an das Systemprotokoll weitergeleitet. In Mountain Lion und darüber, stdout und stderr gehen nirgends für launchd verwaltete Anwendungen. Nur Nachrichten, die explizit an das Systemprotokoll gesendet werden, enden dort. Wenn Sie eine Anwendung schreiben und möchten, dass eine Ausgabe in der Konsole angezeigt wird, verwenden Sie stattdessen eine API, die auf syslog(3) oder asl(3) basiert. NSLog ist ein solches API, und es hat den Vorteil, dass es sich auch in stderr anmeldet, so dass Sie Ihre Ausgabe ganz einfach sehen können, egal wie Sie Ihre Anwendung gestartet haben. Wenn Sie diese Funktionalität möchten, aber asl oder syslog direkt verwenden möchten, dann sollten Sie die ASL_OPT_STDERR-Option zu asl_open und die LOG_PERROR-Option zu openlog suchen.

+0

Haben Sie einen Hinweis darauf, dass sich dieses Verhalten in 'launchd' geändert hat und warum es sich geändert hat? – Albert

+3

Ich habe keinen wirklichen Hinweis, aber Sie können die Änderung bestätigen, indem Sie sich die [launchd source releases] (http://opensource.apple.com/source/launchd/) ansehen. Sie können sehen, dass Verweise auf "log_redirect_fd" und "job_log_stdouterr", die in OS X 10.7.5 Launchd-392.39 vorhanden waren, nicht mehr in Launchd-442.21 vorhanden sind. Dies war die Logik, die dafür verantwortlich war, die stderr- und stdout-Deskriptoren der Anwendung zu lesen und ihre Ausgabe an das Systemprotokoll weiterzuleiten. – bdash

3

Wenn Sie eine alte App haben und stdout oder stderr sehen möchten, öffnen Sie die App von Terminal. Sie können sich zur ausführbaren Datei winden und sie von der Befehlszeile aus öffnen, wie in der normalen, alten Welt: Geben Sie den Programmnamen ein. Dann erscheinen die Nachrichten auf dem Terminal.

Dies ist keine Zurückweisung irgendeiner der anderen, besseren Vorschläge. Es ist nur eine Möglichkeit, die Ausgabe ohne Änderung des (alten) Programms zu erhalten.

Verwandte Themen