마스터 프로세스가 파일 대신 STDOUT STDERR에 로그하는 방법이 있습니까?
access_log 지시문에만 파일 경로를 전달할 수있는 것 같습니다.
access_log /var/log/nginx/access.log
error_log도 마찬가지입니다.
error_log /var/log/nginx/error.log
나는 이것이 단순히 nginx의 기능이 아닐 수도 있음을 이해합니다. 예를 들어 꼬리를 사용하는 간결한 솔루션에 관심이 있습니다. 비록 포 그라운드에서 nginx를 실행하고 있기 때문에 마스터 프로세스에서 오는 것이 바람직합니다.
답변
편집 : 이제 Anon의 답변error_log stderr;
에서 언급 한 것처럼 nginx가 지원하는 것 같습니다 .
로 로그를 보낼 수 있습니다 /dev/stdout
. 에서 nginx.conf
:
daemon off;
error_log /dev/stdout info;
http {
access_log /dev/stdout;
...
}
편집 : 특정 도커 컨테이너를 사용하는 경우 ln -sf / proc / self / fd / dev / 를 실행해야 할 /dev/fd/1
수도 있습니다./dev/fd/2
답변
질문이 도커와 관련이 있다면 … 공식 nginx 도커 이미지는 stdout / stderr을 향한 소프트 링크를 만들어 이것을 수행합니다.
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
답변
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
사용하지 마십시오 : /dev/stderr
systemd-nspawn을 사용하려는 경우 설정이 중단됩니다.
답변
Docker 컨테이너에서 Nginx를 실행할 때 @Boeboe의 답변에 설명 된 것처럼 로그 디렉토리에 마운트 된 볼륨은 Dockerfile의 로그 파일과 stdout / stderr 사이의 소프트 링크를 만드는 목적을 능가 합니다.
이 경우 진입 점에 소프트 링크를 만들거나 (볼륨을 마운트 한 후 실행) 볼륨을 전혀 사용하지 않을 수 있습니다 (예 : 중앙 로깅 시스템에서 로그를 이미 수집 한 경우).
답변
PHP-FPM의 도커 이미지에서 다음과 같은 접근법을 보았습니다.
# 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
답변
디버그 목적으로 :
/usr/sbin/nginx -g "daemon off;error_log /dev/stdout debug;"
고전적인 목적으로
/usr/sbin/nginx -g "daemon off;error_log /dev/stdout info;"
필요
구성 파일의 서버 브래킷 아래
access_log /dev/stdout;
답변
