2016-05-17 7 views
0

Ich muss Legacy-Anwendung in Docker-Container setzen. Die App läuft gut, aber ich kann nicht alle Protokolldateien anzeigen. Das Problem besteht darin, dass die App nach dem Starten der ausführbaren Datei mehrere Protokolldateien erstellt (z. B. service.log, license.log, security.log usw.).Umleiten mehrerer Protokolldateien in Docker Container zu stdout (Legacy-Anwendung)

Ich habe ein Startskript (nennen wir es start.sh), die einige Dinge vorbereitet (Links, Config) und startet dann die App, die die genannten Protokolldateien erstellt.

Nach einigem googeln habe ich similar problem gefunden und versuche, die Lösung anzuwenden, die Named Pipes verwendet (das Erstellen der Verbindung zu /proc/1/fd/1 hat nicht funktioniert). So stellte ich die folgenden in der Startskript:

mkfifo /path/to/app/license.log && tail -f /path/to/app/license.log & 
mkfifo /path/to/app/security.log && tail -f /path/to/app/security.log & 
... 

aber das Problem ist, dass nur die erste Datei auf docker logs weitergeleitet. Die anderen sind überhaupt nicht sichtbar.

Das Kuriose ist, dass in start.sh ich eine Linie source before_start.sh habe, die je nach Umgebung einige spezifische Befehle ausführt. Platzieren der mkfifo license.log in der start.sh und der mkfifo service.log in der before_start.sh funktioniert. Das Problem ist, dass ich mehr Dateien habe und nicht alle source wollen.

Hat jemand eine Idee, wie man das löst?

Antwort

0

Da es sich um eine Legacy-Anwendung handelt, müssen die Protokolldateien noch vorhanden sein. In diesem Fall ist die Lösung, die funktioniert für mich ist es, die Dateien, die von touch zu erstellen und lesen sie Schwanz mit:

touch /path/to/app/logfile.log && tail -f /path/to/app/logfile.log & 

So mkfifo mit touch ersetzt mein Problem gelöst.