access.log

Gena Makhomed gmm на csdoc.com
Ср Июл 13 08:48:50 UTC 2022


On 12.07.2022 22:59, Илья Шипицин wrote:

> если рассматривать с точки зрения эффективного использования диска, то поля
> $scheme, $host являются практически константами, можно не логировать их на
> каждую строчку лога (а, например, разнести разные host-ы по разным логам).

Разнести разные host-ы по разным логам - это на самом деле плохая идея.
Когда различных хостов десятки и сотни - это становится очень неудобно.
Кроме того, это отрицательно сказывается на производительности сервера,
особенно если используется HDD а не SSD.

Имея в наличии один access.log с помощью grep
можно легко получить из него access.log для любого сайта:
grep -P '\texample.com\t' access.log | less -S

$scheme занимает всего несколько байт, и лучше уж пусть будет,
для полноты картины, по сравнению с $http_user_agent - это мелочь.

Для удобства чтения лога и для уменьшения его размера
- можно из лога убрать информацию про таймзону:

     map $time_iso8601 $time {
         "~([0-9-]+)T([0-9:]+)" "$1 $2";
         volatile;
     }

     log_format frontend '$time\t...';

Тогда время в логе будет выглядеть примерно так:

2022-07-13 11:34:40

а не так:

2022-07-13T11:34:40+03:00

Переменная $time вместо $time_iso8601 в логе
дает и меньший объем лога и его лучшую читаемость.

Недостаток у этого варианта с переменной $time только
один - приходится программировать на конфигах nginx,
используя map и регулярные выражения, - это несколько
увеличивает объем конфига, но должно работать достаточно быстро.

-- 
Best regards,
  Gena


Подробная информация о списке рассылки nginx-ru