Ich habe ein Problem mit der Protokollierung zur Ausgabe von einem automatisierten Build.
Die Erstellung erfolgt mit einem Makefile und dem Makefile-Dienstprogramm.
Das Problem ist, dass normale Ausgaben wie Compiler-Befehlszeilen zu stdout gehen und Kompilierungsfehler zu stderr gehen.
Ich möchte die Ausgabe vom Build erhalten, so wie sie auf dem Bildschirm angezeigt würde. So etwas wie:
%Vor%Was ich (aus einem ksh-Skript) versucht habe, ist:
mache -k & gt; build.log 2 & gt; build.log
Dies führt zu einer einzelnen Protokolldatei, aber das Problem ist, dass die Datenströme gepuffert sind und das Ergebnis in der Protokolldatei durcheinander ist.
Ich könnte die Ausgabe in zwei separate Protokolldateien aufzeichnen, aber dann hätte ich keine Informationen darüber, wie sie in einer einzigen Protokolldatei zusammengefügt werden können.
Gibt es eine Möglichkeit, in diesem Fall die Pufferung für stdout und stderr zu deaktivieren?
Das sollte besser für Sie funktionieren, da es stderr und stdout nicht separat umleitet, sondern stderr nach stdout umleitet, was die Pufferung zur Synchronisation bringen sollte.
Wenn Sie es sowohl in einer Datei als auch auf der Konsole speichern möchten:
%Vor%Ich könnte die Ausgabe in 2 erfassen separate Protokolldateien aber dann würde ich habe keine Informationen darüber, wie man sie wieder klebt zusammen in einer einzigen Protokolldatei.
Sie wieder zusammen zu kleben ist schwierig, aber es gibt auch eine richtige Antwort, und es funktioniert! Siehe " Wie kann ich stdout und stderr in verschiedenen Dateien speichern oder umleiten? "von Vivek Gite.
setbuf (stdout, NULL); - & gt; schaltet die Pufferung der Standardausgabe aus