Existe-t-il un moyen d'avoir le journal de processus principal vers STDOUT STDERR au lieu d'un fichier?
Il semble que vous ne pouvez passer un chemin de fichier qu'à 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 tail, par exemple. Il est cependant préférable que cela vienne du processus maître car j'exécute nginx au premier plan.
Réponses:
Edit: il semble que nginx prend désormais en charge
error_log stderr;
comme mentionné dans la réponse d'Anon .Vous pouvez envoyer les journaux à
/dev/stdout
. Dansnginx.conf
:edit: peut avoir besoin d'exécuter ln -sf / proc / self / fd / dev / si vous utilisez certains conteneurs docker, puis utilisez
/dev/fd/1
ou/dev/fd/2
la source
ENXIO
lorsque stdout est ouvert sur une socket plutôt que sur un fichier. Il y a un ticket de noyau en amont indiquant que c'est délibéré et intentionnel: bugzilla.kernel.org/show_bug.cgi?id=1360 - ainsi, bien que cette réponse soit suffisante dans certains cas, elle ne couvre pas entièrement la gamme des possibles les échecs.stderr
selon la documentation)Si la question est liée au docker ... les images officielles du docker nginx le font en créant des liens logiciels vers stdout / stderr
RUN ln -sf /dev/stdout /var/log/nginx/access.log && ln -sf /dev/stderr /var/log/nginx/error.log
RÉF: https://microbadger.com/images/nginx
la source
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
Ne pas utiliser:
/dev/stderr
Cela interrompra votre configuration si vous utilisez systemd-nspawn.la source
Lors de l'exécution de Nginx dans un conteneur Docker, sachez qu'un volume monté sur le répertoire du journal ne permet pas de créer un lien souple entre les fichiers journaux et stdout / stderr dans votre Dockerfile, comme décrit dans la réponse de @Boeboe .
Dans ce cas, vous pouvez soit créer le softlink dans votre point d'entrée (exécuté après le montage des volumes) ou ne pas utiliser du tout un volume (par exemple lorsque les journaux sont déjà collectés par un système de journalisation central).
la source
Dans l'image docker de PHP-FPM, j'ai vu une telle approche:
la source
À des fins de débogage:
Dans un but classique
Exiger
Sous le support de serveur sur le fichier de configuration
la source