Ich habe eine Anwendung, die jede Transaktion protokollieren muss. Jede Protokollnachricht wird gelöscht, da aufgezeichnet werden muss, was zu einem Absturz geführt hat. Meine Kollegen und ich waren neugierig, wie die Leistungseffekte der Pufferung erzielt werden können, während gleichzeitig sichergestellt wird, dass die Protokollnachricht den Prozess verlassen hat.
Was wir uns ausgedacht haben, ist:
- Erstellen Sie ein FIFO, in das die Anwendung schreiben kann, und
- Leiten Sie den Inhalt dieses FIFO über in eine reguläre Datei um
cat
.
Das heißt, was normalerweise war:
app --logfile logfile.txt
ist jetzt:
mkfifo logfifo
cat logfifo &> logfile.txt &
app --logfile logfifo
Gibt es Fallstricke bei diesem Ansatz? Es hat funktioniert, als wir es getestet haben, aber wir möchten unbedingt sicherstellen, dass die Nachrichten auch dann in die Umleitungsdatei gelangen, wenn die ursprüngliche Anwendung abstürzt.
(Wir haben keinen Quellcode für die Anwendung, daher kommen Programmierlösungen nicht in Frage. Außerdem schreibt die Anwendung nicht darauf stdout
, sodass eine direkte Weiterleitung an einen anderen Befehl nicht in Frage kommt. Dies syslog
ist also keine Möglichkeit .)
Update: Ich habe ein Kopfgeld hinzugefügt. Die akzeptierte Antwort beinhaltet nichtlogger
den einfachen Grund, logger
nach dem ich nicht gefragt habe. Wie die ursprüngliche Frage besagt, suche ich nur nach Fallstricken bei der Verwendung eines FIFO.