it-swarm.com.de

Haben Sie nginx access_log und error_log in STDOUT und STDERR des Master-Prozesses protokolliert

Gibt es eine Möglichkeit, den Master-Prozess in STDOUT STDERR anstatt in eine Datei zu protokollieren? 

Es scheint, dass Sie nur einen Dateipfad an die Direktive access_log übergeben können:

access_log  /var/log/nginx/access.log

Und das gleiche gilt für error_log:

error_log /var/log/nginx/error.log

Ich verstehe, dass dies einfach keine Funktion von nginx ist. Ich wäre beispielsweise an einer prägnanten Lösung interessiert, die beispielsweise tail verwendet. Es ist jedoch vorzuziehen, dass es vom Master-Prozess stammt, weil ich Nginx im Vordergrund laufen lasse. 

96
quinn

Bearbeiten: Es scheint, dass Nginx jetzt error_log stderr; Unterstützt, wie in Anons Antwort erwähnt.

Sie können die Protokolle an /dev/stdout Senden. In nginx.conf:

daemon off;
error_log /dev/stdout info;

http {
  access_log /dev/stdout;
  ...
}

edit: Möglicherweise muss ln -sf/proc/self/fd/dev / ausgeführt werden. Wenn Sie bestimmte Docker-Container ausführen, verwenden Sie /dev/fd/1 oder /dev/fd/2.

160
Patrick

Wenn die Frage im Zusammenhang mit dem Docker steht ... Die offiziellen Nginx Docker-Images machen dies, indem sie Softlinks in Richtung stdout/stderr machen

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

36
Boeboe
Syntax: error_log file | stderr | syslog:server=address[,parameter=value] | memory:size [debug | info | notice | warn | error | crit | alert | emerg];
Default:    
error_log logs/error.log error;
Context:    main, http, stream, server, location

http://nginx.org/de/docs/ngx_core_module.html#error_log

Verwenden Sie nicht: /dev/stderr Dies wird Ihr Setup beschädigen, wenn Sie systemd-nspawn verwenden.

18
Anon

Beachten Sie beim Ausführen von Nginx in einem Docker-Container, dass ein über das Protokollverzeichnis gemounteter Datenträger die Erstellung eines Softlinks zwischen den Protokolldateien und stdout/stderr in Ihrer Docker-Datei verhindert, wie in @Boeboes Antwort beschrieben. 

In diesem Fall können Sie entweder den Softlink in Ihrem Einstiegspunkt erstellen (wird ausgeführt, nachdem Datenträger bereitgestellt werden) oder gar keinen Datenträger verwenden (z. B. wenn Protokolle bereits von einem zentralen Protokollierungssystem erfasst werden). 

3
VME

Im Docker-Image von PHP-FPM habe ich einen solchen Ansatz gesehen:

# cat /usr/local/etc/php-fpm.d/docker.conf
[global]
error_log = /proc/self/fd/2

[www]
; if we send this to /proc/self/fd/1, it never appears
access.log = /proc/self/fd/2
0
Oleg Neumyvakin