2012-10-27 12 views
16

Wcześniej mogłem odczytać wszystkie dane stdout/stderr z aplikacji w Console.app. Od pewnego czasu tak już nie jest (dane NSLog wciąż tam są). Mam teraz 10,8.jak zdobyć stdout w Console.app

Pojawił się earlier similar question from 2010, który nie wydaje się już aktualny.

W SU istnieje również similar question, który nie został jeszcze odebrany.

Czy to zostało zmienione, np. Stdout nie powinien być już zalogowany? Czy coś jest zepsute w moim systemie (ze starego pytania SU, brzmiało to tak, jak mogłoby być - ale bez pomocy)?

Czy mogę jakoś to zmienić?

Odpowiedz

15

Przed Mountain Lion wszystkie procesy zarządzane przez launchd, w tym zwykłe aplikacje, miały swoje deskryptory plików standardowe i stderr przekazywane do logu systemowego. W Mountain Lion i powyżej, stdout i stderr idą do nikąd dla zarządzanych aplikacji launchd. Zostaną tam tylko wiadomości jawnie wysłane do logu systemowego.

Jeśli piszesz aplikację i chcesz, aby w konsoli pojawiły się jakieś dane wyjściowe, zastosuj interfejs API oparty na syslog(3) lub asl(3). NSLog to jeden z takich interfejsów API, który ma tę zaletę, że umożliwia rejestrowanie się na stderr, dzięki czemu można łatwo zobaczyć wyniki niezależnie od tego, w jaki sposób uruchomiłeś aplikację. Jeśli chcesz skorzystać z tej funkcji, ale chcesz bezpośrednio użyć numeru asl lub syslog, musisz sprawdzić opcję ASL_OPT_STDERR na asl_open i opcję LOG_PERROR na odpowiednio openlog.

+0

Czy masz jakieś odniesienie, że to zachowanie zmieniło się w 'launchd' i dlaczego się zmieniło? – Albert

+3

Nie mam żadnego prawdziwego odniesienia, ale możesz potwierdzić zmianę, przeglądając [released źródła wydania] (http://opensource.apple.com/source/launchd/). Widać, że odniesienia do 'log_redirect_fd' i' job_log_stdouterr', które były obecne w launchd-392.39 OS X 10.7.5, nie są już obecne w launchd-442.21. Była to logika odpowiedzialna za czytanie deskryptorów stderr i stdout aplikacji i przekazywanie ich wyników do logu systemowego. – bdash

3

Jeśli masz starą aplikację i chcesz zobaczyć stdout lub stderr, otwórz aplikację z Terminala. Możesz przekierować drogę do pliku wykonywalnego i otworzyć go z wiersza poleceń, tak jak w normalnym, starym świecie: wpisz nazwę programu. Następnie komunikaty pojawią się na terminalu.

To nie jest odrzucenie żadnej z innych, lepszych sugestii. Jest to po prostu sposób na wyjście bez zmiany (starego) programu.