Existe-t-il un moyen de consigner le journal de processus maître dans STDOUT STDERR plutôt que dans un fichier?
Il semble que vous ne pouvez passer qu'un chemin de fichier à la directive access_log:
access_log /var/log/nginx/access.log
Et il en va de même pour error_log:
error_log /var/log/nginx/error.log
Je comprends que cela ne soit tout simplement pas une fonctionnalité de nginx, je serais intéressé par une solution concise qui utilise la queue, par exemple. Il est préférable que cela vienne du processus maître, car j’exécute nginx au premier plan.
Si la question est liée au docker ... les images officielles du docker nginx le font en faisant des liens symboliques vers
RUN ln -sf /dev/stdout /var/log/nginx/access.log && ln -sf /dev/stderr /var/log/nginx/error.log
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/en/docs/ngx_core_module.html#error_log
N'utilisez pas: /dev/stderr
Cela cassera votre configuration si vous voulez utiliser systemd-nspawn.
Lors de l'exécution de Nginx dans un conteneur Docker, sachez qu'un volume monté sur le répertoire de journalisation empêche la création d'un lien symbolique entre les fichiers journaux et stdout/stderr dans votre fichier Docker, comme décrit dans @Boeboe's answer .
Dans ce cas, vous pouvez créer le lien symbolique dans votre point d'entrée (exécuté après le montage des volumes) ou ne pas utiliser de volume du tout (par exemple, lorsque les journaux sont déjà collectés par un système de journalisation central).
Dans l'image de docker de PHP-FPM, je vois une telle approche:
# 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