Разделение логов в nginx

12
D
На сайте с 28.06.2008
Offline
1101
2472

Пытаюсь разнести логи по нужным мне условиям. Можно ли уместить это в одном map?

Например так можно?

map "$whitelist:$server_protocol" $log {
default 0;
"0:HTTP/1.0" 1;
"0:HTTP/1.1" 2;
"0:HTTP/2.0" 3;
}

Можно ли как-то так?

access_log /var/log/nginx/access.1.0.log combined if=$log1;
access_log /var/log/nginx/access.1.1.log combined if=$log2;
access_log /var/log/nginx/access.2.0.log combined if=$log3;
M
На сайте с 17.09.2016
Offline
124
#1

access_log /var/log/nginx/access.$log.log combined if=$log;

D
На сайте с 28.06.2008
Offline
1101
#2
Mobiaaa:
access_log /var/log/nginx/access.$log.log combined if=$log;

Так можно получить три разных лога из одного мапа?

---------- Добавлено 01.02.2017 в 20:48 ----------

Сделал как вы предложили - нгихс перезагрузился нормально, но логи не создались

---------- Добавлено 01.02.2017 в 21:05 ----------

пока разнес на три мапа (работает), но как то не красиво, может можно в один объединить?

M
На сайте с 17.09.2016
Offline
124
#3

access_log /var/log/nginx/access.1.0.log combined if=$log=1;

access_log /var/log/nginx/access.1.1.log combined if=$log=2;

access_log /var/log/nginx/access.2.0.log combined if=$log=3;

D
На сайте с 28.06.2008
Offline
1101
#4
Mobiaaa:
access_log /var/log/nginx/access.1.0.log combined if=$log=1;
access_log /var/log/nginx/access.1.1.log combined if=$log=2;
access_log /var/log/nginx/access.2.0.log combined if=$log=3;

Тоже не верное, сайты работают, но логи не создаются.

V
На сайте с 05.08.2007
Offline
87
#5

Источник, цитата:

"Синтаксис: access_log ...

...

...

Контекст: http, server, location, if в location, limit_except"

Как видим, в контекстах применения access_log нет map, следовательно, так сделать нельзя.

Но логи можно легко парсить по заданным условиям.

---

Виктор

С уважением, Victor (http://adm-lib.ru)
D
На сайте с 28.06.2008
Offline
1101
#6
VGrey:

"Синтаксис: access_log ...
Контекст: http, server, location, if в location, limit_except"
Как видим, в контекстах применения access_log нет map, следовательно, так сделать нельзя.

а никто и не пытается пихать access_log в мап, задача уместить условия для трех логов в одном мапе и потом как-то передать это в сервер

-
На сайте с 15.12.2010
Offline
133
#7
Dram:
задача уместить условия для трех логов в одном мапе и потом как-то передать это в сервер

Не получится. В имя логфайла пихать переменные нельзя, а if тут работает только как 0 или не 0.

Параметр if (1.7.0) включает условную запись в лог. Запрос не будет записываться в лог, если результатом вычисления условия является “0” или пустая строка.

В общем, проще трех map решения не вижу.

UPD

Хм. А может и получится. Похоже что можно использовать переменные. Но тут есть ограничения:

В пути файла можно использовать переменные (0.7.6+), но такие логи имеют некоторые ограничения:

пользователь, с правами которого работают рабочие процессы, должен иметь права на создание файлов в каталоге с такими логами;
не работает буферизация;
файл открывается для каждой записи в лог и сразу же после записи закрывается. Следует однако иметь в виду, что поскольку дескрипторы часто используемых файлов могут храниться в кэше, то при вращении логов в течение времени, заданного параметром valid директивы open_log_file_cache, запись может продолжаться в старый файл.
при каждой записи в лог проверяется существование корневого каталога для запроса — если этот каталог не существует, то лог не создаётся. Поэтому root и access_log нужно описывать на одном уровне:
server {
root /spool/vhost/data/$host;
access_log /spool/vhost/logs/$host;
...
M
На сайте с 17.09.2016
Offline
124
#8
-Dima-:
Не получится. В имя логфайла пихать переменные нельзя

Можно, даже в доке есть пример с $host в пути access_log

-
На сайте с 15.12.2010
Offline
133
#9
Mobiaaa:
Можно, даже в доке есть пример с $host в пути access_log

Да, Вы правы.

Уже поправил. То если используется буфер для логов то нельзя переменные использовать.

M
На сайте с 17.09.2016
Offline
124
#10

в целом - да

3 map наверное единственный вариант

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий