Gibt es eine Möglichkeit, das Master-Prozessprotokoll in STDOUT STDERR anstatt in einer Datei zu speichern?
Es scheint, dass Sie nur einen Dateipfad an die Direktive access_log übergeben können:
access_log /var/log/nginx/access.log
Gleiches gilt für error_log:
error_log /var/log/nginx/error.log
Ich verstehe, dass dies möglicherweise kein Merkmal von Nginx ist. Ich wäre an einer prägnanten Lösung interessiert, die beispielsweise Tail verwendet. Es ist jedoch vorzuziehen, dass es aus dem Master-Prozess stammt, da ich Nginx im Vordergrund ausführe.
Antworten:
Bearbeiten: Es scheint, dass Nginx jetzt unterstützt,
error_log stderr;
wie in Anons Antwort erwähnt .Sie können die Protokolle an senden
/dev/stdout
. Innginx.conf
:Bearbeiten: Möglicherweise muss ln -sf / proc / self / fd / dev / ausgeführt werden, wenn bestimmte Docker-Container ausgeführt werden. Verwenden Sie dann
/dev/fd/1
oder/dev/fd/2
quelle
ENXIO
wenn stdout für einen Socket und nicht für eine Datei geöffnet ist. Es gibt ein Upstream-Kernel-Ticket, das darauf hinweist, dass dies absichtlich und absichtlich ist: bugzilla.kernel.org/show_bug.cgi?id=1360 - obwohl diese Antwort in einigen Fällen ausreichend ist, deckt sie den möglichen Bereich nicht vollständig ab Ausfälle.stderr
laut Dokumentation ausgegeben werden)Wenn die Frage mit dem Docker zusammenhängt, tun dies die offiziellen Nginx-Docker-Bilder, indem sie Softlinks zu stdout / stderr erstellen
RUN ln -sf /dev/stdout /var/log/nginx/access.log && ln -sf /dev/stderr /var/log/nginx/error.log
REF: https://microbadger.com/images/nginx
quelle
FROM nginx:alpine RUN ln -sf /dev/stdout /var/log/nginx/access.log \ && ln -sf /dev/stderr /var/log/nginx/error.log CMD ["nginx-debug", "-g", "daemon off;"]
http://nginx.org/en/docs/ngx_core_module.html#error_log
Nicht verwenden:
/dev/stderr
Dies bricht Ihr Setup, wenn Sie systemd-nspawn verwenden.quelle
Beachten Sie beim Ausführen von Nginx in einem Docker-Container, dass ein über das Protokollverzeichnis gemountetes Volume den Zweck der Erstellung eines Softlinks zwischen den Protokolldateien und stdout / stderr in Ihrer Docker-Datei zunichte macht, wie in der Antwort von @Boeboe beschrieben .
In diesem Fall können Sie entweder den Softlink in Ihrem Einstiegspunkt erstellen (ausgeführt, nachdem Volumes bereitgestellt wurden) oder überhaupt kein Volume verwenden (z. B. wenn Protokolle bereits von einem zentralen Protokollierungssystem erfasst wurden).
quelle
Im Docker-Image von PHP-FPM sehe ich einen solchen Ansatz:
quelle
Für einen Debug-Zweck:
Für einen klassischen Zweck
Benötigen
Unter der Server-Klammer in der Konfigurationsdatei
quelle