2017-12-30 44 views
0

Sie können die Frage als ein Duplikat sehen, aber bitte bis zum Ende lesen.Embedded Linux -> Speichern von Anwendungsprotokollen in Datei

Ich habe eine Anwendung läuft auf dem Embedded Linux und ich möchte alle Protokolle aus der Anwendung erfassen. Ich habe versucht mit den mit Dateideskriptoren wie 1 für stdout und 2 für stderr. Ich konnte stderr Logs erfassen. Ich möchte die Protokolle mit der printf Aussage erfassen. Die Anwendung ist bereits gebaut, so dass ich sie nicht ändern kann. Es ist eingebettetes Linux, also hat es kein Skript Dienstprogramm. Meine Anwendung haben printf Protokolle. Alles, was ich will, ist, sie mit Shell-Befehl zu erfassen, falls vorhanden. Ich habe unten versucht, Befehle

./application 2>&1 | tee file.txt 
./application >cmd.log 2>&1 
./application | tee log.txt 

Mit diesen Befehlen konnte ich Fehlermeldungen erfassen, nicht aber die printf Nachrichten

Bitte helfen.

Antwort

1

Ihre ersten beiden Befehlszeilen sollten eigentlich alles fangen, die gesendet wird (über printf, puts, was auch immer) zu stdin und stderr (die letzte Kommandozeile verfehlt das letztere).

Wenn weiterhin Nachrichten gedruckt auf die Konsole oder tty sind, wird die Anwendung entweder Umleitungen (unter Verwendung von dup2, zum Beispiel) stderr und/oder stdout zu einem anderen Gerät oder es hat sein Ausgangshaupt nicht auf diese beiden Dateien senden (glibc zum Beispiel ist bekannt, in bestimmten Fehlerfällen direkt auf das Konsolengerät zu schreiben).

Ohne zu wissen, wo diese Ausgabe tatsächlich gesendet wird, ist es unmöglich, sie zu fangen. strace Die Anwendung kann verwendet werden, um herauszufinden, wohin diese Zeichenfolgen gesendet werden.

+0

Sie sollten, wenn die Shell etwas wie Bash ist, die diesen Mechanismus unterstützt, aber auf einem eingebetteten Gerät könnte die Shell primitiver sein. Es ist auch möglich, dass die Anwendung direkt in/dev/console oder so ähnlich schreibt. –

Verwandte Themen