Nginx の log_format を変更したけれども反映されずハマった話

Published: 2021/12/16


nginx は、普通にインストールすると /etc/nginx 以下にデフォルトの設定ファイルが配置され、カスタマイズをする際にはここをいじることになる。 その中で、 /etc/nginx/nginx.conf のファイルには、以下のような log_format についての記述がある。

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';

素直に考えると、この設定をいじればログ出力の形式を変更できると思われるが、ここを編集して nginx をリスタートしてもログ出力の形式は変わらず、それで少しハマってしまった。

原因と対処方法

上記の log_format の設定は、「main という名前のログ形式を定義しろ」という意味のディレクティブであり、なのでこれを利用する際にはその名前を明示的に指定する必要がある。

自分は /etc/nginx/conf.d/サービス名.conf にて各種のサーバーごとの設定を記述していたが、そこの access_log の設定においてこの名前を特に指定せず利用していたのが原因だった。

access_log /path/to/log/file.log;

なので、 /etc/nginx/conf.d/サービス名.conf 等において、以下のように access_log を指定する必要がある。

access_log /path/to/log/file.log main;

Tags: nginx

関連記事