Как отключить ведение журнала Nginx?

27

У меня есть следующее в конфигурационном файле

server {
    listen       80;
    server_name  _;
    access_log  /var/log/nginx/access.log  main;
  ...

server {
    listen       80;
    server_name  example.com
    access_log  off;
    error_log off;

Но это все еще продолжает регистрироваться для example.comвиртуального хоста. Что я делаю не так?

user965363
источник
Что вы намерены сделать «главным» здесь?
Эван Кэрролл
Я пометил этот вопрос для удаления, потому что наиболее часто встречающийся ответ связан с вашей синтаксической ошибкой. Это не имеет ничего общего с отключением регистрации ошибок. В нем нет доступных для поиска сообщений об ошибках, и я не уверен, что вы спрашиваете или почему предоставленные ответы не решают вашу проблему.
Эван Кэрролл

Ответы:

31

Вы пропали ;после директивы server_name. access_logи offрассматриваются как дополнительные имена_сервера.

RVS
источник
12
Кроме того, error_log выключен; не отключает регистрацию ошибок. Он просто записывает ошибки в файл с именем «off». Нет никакого способа полностью отключить регистрацию ошибок, самый близкий, который Вы можете получить, является error_log / dev / null crit; это почти то же самое, так как журнал ошибок не появится.
kolbyjack
6
Фактически, выполнение access_log off;заставляет nginx записывать журнал в файл с именем off. Так что это неправильный ответ.
user965363
4
На самом деле, это правильный ответ. «Использование« off »в качестве единственного параметра очищает все директивы access_log для текущего уровня»: wiki.nginx.org/HttpLogModule#access_log . Это не верно для error_log (как добавлено @kolbyjack), но я считаю, что вопрос касался доступа, а не журнала ошибок. Возможно, что некоторые очень старые версии nginx не поддерживают это.
RVS
Есть ли преимущество в использовании offвместо /dev/null? Если в offнекоторых версиях Nginx происходит запись в файл с именем off, это /dev/nullкажется более универсальным решением.
Джо Морнин
20

Конечно, вы можете полностью отключить ведение журнала. Просто укажите лог-файлы на / dev / null и все будет готово. ;)

access_log  /dev/null;
error_log /dev/null;
Франц Беттаг
источник
3
Я тоже этим пользуюсь; /dev/nullэто реальное направление; в то время как "off" - это файл в некотором каталоге
edoceo
4
Это не официальный рекомендуемый способ сделать это. Использование 'off' является правильным способом.
user1751825
Я сделал это / var / null, и теперь он начинает сохранять журналы в файле с именем "null" в каталоге var. Должно ли это быть только "/ dev / null"?
Гаурав
13

Вы можете отключить access_logс помощью

access_log off;

но если вы хотите отключить error_log, просто не используйте опцию error_log в вашем conf.

Мустафа Озгюр
источник
2
Как это добавляет к более ранним ответам?
Дейв М
1
Потому что предыдущий ответ бесполезен! Не используйте это
Мустафа Озгюр
2
Если в конфигурации нет параметра error_log, nginx по умолчанию имеет значение «error_log logs / error.log error»: nginx.org/en/docs/ngx_core_module.html#error_log
Джулиан Ладиш
да, мужик, это верно. Итак, мы должны / dev / null или что-то еще? каково ваше предложение?
Мустафа Озгюр
Этот ответ неверен, так как при этом будет создан файл журнала «/ usr / share / nginx / off»
DanielKhan
1

Это должно быть довольно просто, вы можете закомментировать строки журнала

server {
    listen       80;
    server_name  _;
    #access_log  /var/log/nginx/access.log  main;
  ...

server {
    listen       80;
    server_name  example.com
    #access_log  off;
    #error_log off;

и если вы получите критические ошибки, вы должны сделать это так: «error_log / dev / null crit;», так что это будет:

server {
    listen       80;
    server_name  _;
    access_log  /dev/null crit;
  ...

server {
    listen       80;
    server_name  example.com
    access_log  /dev/null crit;
    error_log /dev/null crit;
Даниэль Гулдберг Aaes
источник
Не используйте «выключено». Как упоминалось ниже, это создаст файл журнала с именем 'off' в домашней директории nginx.
DanielKhan
0

Основано на условном ведении журнала в посте Nginx, но вместо использования переменной для определения при регистрации запроса, просто используя постоянное значение 0.

server {
listen       80;
server_name  _;
access_log  /var/log/nginx/access.log  main;
}

server {
listen       80;
server_name  example.com
access_log  /var/log/nginx/access.log if=0;
error_log /var/log/nginx/error.log if=0;
}
Аарон
источник