Nginx error log path

I'm using Django with FastCGI + nginx. Where are the logs (errors) stored in this case?

I’m using Django with FastCGI + nginx. Where are the logs (errors) stored in this case?

Peter Mortensen's user avatar

asked Nov 10, 2009 at 7:09

ha22109's user avatar

Errors are stored in the nginx log file. You can specify it in the root of the nginx configuration file:

error_log  /var/log/nginx/nginx_error.log  warn;

On Mac OS X with Homebrew, the log file was found by default at the following location:

/usr/local/var/log/nginx

Peter Mortensen's user avatar

answered Nov 10, 2009 at 11:30

syava's user avatar

syavasyava

5,7681 gold badge16 silver badges2 bronze badges

3

I was looking for a different solution.

Error logs, by default, before any configuration is set, on my system (x86 Arch Linux), was found in:

/var/log/nginx/error.log

Peter Mortensen's user avatar

answered Sep 1, 2013 at 9:10

Ben's user avatar

BenBen

53.5k48 gold badges176 silver badges224 bronze badges

2

You can use lsof (list of open files) in most cases to find open log files without knowing the configuration.

Example:

Find the PID of httpd (the same concept applies for nginx and other programs):

$ ps aux | grep httpd
...
root     17970  0.0  0.3 495964 64388 ?        Ssl  Oct29   3:45 /usr/sbin/httpd
...

Then search for open log files using lsof with the PID:

$ lsof -p 17970 | grep log
httpd   17970 root    2w   REG             253,15     2278      6723 /var/log/httpd/error_log
httpd   17970 root   12w   REG             253,15        0      1387 /var/log/httpd/access_log

If lsof prints nothing, even though you expected the log files to be found, issue the same command using sudo.

You can read a little more here.

Peter Mortensen's user avatar

answered Dec 10, 2014 at 16:06

5

Run this command, to check error logs:

tail -f /var/log/nginx/error.log

ndmeiri's user avatar

ndmeiri

4,93812 gold badges35 silver badges44 bronze badges

answered Oct 5, 2015 at 15:37

Taimoor Changaiz's user avatar

Taimoor ChangaizTaimoor Changaiz

10k4 gold badges48 silver badges53 bronze badges

My ngninx logs are located here:

/usr/local/var/log/nginx/*

You can also check your nginx.conf to see if you have any directives dumping to custom log.

run nginx -t to locate your nginx.conf.

# in ngingx.conf
error_log  /usr/local/var/log/nginx/error.log;
error_log  /usr/local/var/log/nginx/error.log  notice;
error_log  /usr/local/var/log/nginx/error.log  info;

Nginx is usually set up in /usr/local or /etc/. The server could be configured to dump logs to /var/log as well.

If you have an alternate location for your nginx install and all else fails, you could use the find command to locate your file of choice.

find /usr/ -path "*/nginx/*" -type f -name '*.log', where /usr/ is the folder you wish to start searching from.

answered Dec 10, 2014 at 13:44

lfender6445's user avatar

lfender6445lfender6445

32.1k11 gold badges117 silver badges98 bronze badges

1

Logs location on Linux servers:

Apache – /var/log/httpd/

IIS – C:inetpubwwwroot

Node.js – /var/log/nodejs/

nginx – /var/log/nginx/

Passenger – /var/app/support/logs/

Puma – /var/log/puma/

Python – /opt/python/log/

Tomcat – /var/log/tomcat8

Peter Mortensen's user avatar

answered Sep 6, 2018 at 12:34

Syed Shibli's user avatar

Syed ShibliSyed Shibli

9821 gold badge12 silver badges15 bronze badges

Type this command in the terminal:

sudo cat /var/log/nginx/error.log

Peter Mortensen's user avatar

answered Jan 4, 2018 at 6:05

priyasha's user avatar

priyashapriyasha

4675 silver badges4 bronze badges

1

For Mac OS users, you can type nginx -help in your terminal.

nginx version: nginx/1.21.0
Usage: nginx [-?hvVtTq] [-s signal] [-p prefix]
             [-e filename] [-c filename] [-g directives]

Options:
  -?,-h         : this help
  -v            : show version and exit
  -V            : show version and configure options then exit
  -t            : test configuration and exit
  -T            : test configuration, dump it and exit
  -q            : suppress non-error messages during configuration testing
  -s signal     : send signal to a master process: stop, quit, reopen, reload
  -p prefix     : set prefix path (default: /opt/homebrew/Cellar/nginx/1.21.0/)
  -e filename   : set error log file (default: /opt/homebrew/var/log/nginx/error.log)
  -c filename   : set configuration file (default: /opt/homebrew/etc/nginx/nginx.conf)
  -g directives : set global directives out of configuration file

Then, you could find some default path for configuration and log files, in this case:

/opt/homebrew/log/nginx/error.log

answered Jun 26, 2021 at 3:48

minglyu's user avatar

minglyuminglyu

2,8352 gold badges12 silver badges31 bronze badges

cd /var/log/nginx/
cat error.log

Mariusz Jamro's user avatar

answered Jun 9, 2015 at 6:12

user4989001's user avatar

0

It is a good practice to set where the access log should be in nginx configuring file . Using acces_log /path/ Like this.

keyval $remote_addr:$http_user_agent $seen zone=clients;

server { listen 443 ssl;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers   HIGH:!aNULL:!MD5;

if ($seen = "") {
    set $seen  1;
    set $logme 1;
}
access_log  /tmp/sslparams.log sslparams if=$logme;
error_log  /pathtolog/error.log;
# ...
}

answered Jan 6, 2021 at 11:48

araldhafeeri's user avatar

I found it in /usr/local/nginx/logs/*.

Peter Mortensen's user avatar

answered Jul 16, 2019 at 11:36

mygeea's user avatar

mygeeamygeea

4693 silver badges9 bronze badges

2

Модуль ngx_http_log_module записывает логи запросов
в указанном формате.

Логи записываются в контексте location’а, где заканчивается обработка.
Это может быть location, отличный от первоначального, если в процессе
обработки запроса происходит
внутреннее
перенаправление.

Пример конфигурации

log_format compression '$remote_addr - $remote_user [$time_local] '
                       '"$request" $status $bytes_sent '
                       '"$http_referer" "$http_user_agent" "$gzip_ratio"';

access_log /spool/logs/nginx-access.log compression buffer=32k;

Директивы

Синтаксис: access_log
путь
[формат
[buffer=размер]
[gzip[=степень]]
[flush=время]
[if=условие]];

access_log off;
Умолчание:
access_log logs/access.log combined;
Контекст: http, server, location, if в location, limit_except

Задаёт путь, формат и настройки буферизованной записи в лог.
На одном уровне конфигурации может использоваться несколько логов.
Запись в syslog
настраивается указанием префикса
syslog:” в первом параметре.
Специальное значение off отменяет все директивы
access_log для текущего уровня.
Если формат не указан, то используется предопределённый формат
combined”.

Если задан размер буфера с помощью параметра buffer или
указан параметр gzip (1.3.10, 1.2.7), то запись будет
буферизованной.

Размер буфера должен быть не больше размера атомарной записи в дисковый файл.
Для FreeBSD этот размер неограничен.

При включённой буферизации данные записываются в файл:

  • если очередная строка лога не помещается в буфер;
  • если данные в буфере находятся дольше интервала времени, заданного
    параметром flush (1.3.10, 1.2.7);
  • при переоткрытии лог-файла или
    завершении рабочего процесса.

Если задан параметр gzip, то буфер будет сжиматься перед
записью в файл.
Степень сжатия может быть задана в диапазоне от 1 (быстрее, но хуже сжатие)
до 9 (медленнее, но лучше сжатие).
По умолчанию используются буфер размером 64К байт и степень сжатия 1.
Данные сжимаются атомарными блоками, и в любой момент времени лог-файл может
быть распакован или прочитан с помощью утилиты “zcat”.

Пример:

access_log /path/to/log.gz combined gzip flush=5m;

Для поддержки gzip-сжатия логов nginx должен быть собран с библиотекой zlib.

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

  • пользователь,
    с правами которого работают рабочие процессы, должен
    иметь права на создание файлов в каталоге с такими логами;
  • не работает буферизация;
  • файл открывается для каждой записи в лог и сразу же после записи закрывается.
    Следует однако иметь в виду, что поскольку дескрипторы часто используемых файлов
    могут храниться в кэше,
    то при вращении логов в течение времени, заданного параметром
    valid директивы open_log_file_cache,
    запись может продолжаться в старый файл.
  • при каждой записи в лог проверяется существование
    корневого каталога
    для запроса — если этот каталог не существует, то лог не создаётся.
    Поэтому root
    и access_log нужно описывать на одном уровне конфигурации:

    server {
        root       /spool/vhost/data/$host;
        access_log /spool/vhost/logs/$host;
        ...
    

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

map $status $loggable {
    ~^[23]  0;
    default 1;
}

access_log /path/to/access.log combined if=$loggable;
Синтаксис: log_format
название
[escape=default|json|none]
строка ...;
Умолчание:
log_format combined "...";
Контекст: http

Задаёт формат лога.

Параметр escape (1.11.8) позволяет задать
экранирование символов json или default
в переменных, по умолчанию используется default.
Значение none (1.13.10) отключает
экранирование символов.

При использовании default
символы “"”, “”,
a также символы со значениями меньше 32 (0.7.0) или больше 126 (1.1.6)
экранируются как “xXX”.
Если значение переменной не найдено,
то в качестве значения в лог будет записываться дефис (“-”).

При использовании json
экранируются все символы, недопустимые
в JSON строках:
символы “"” и
” экранируются как
"” и “\”,
символы со значениями меньше 32 экранируются как
n”,
r”,
t”,
b”,
f” или
u00XX”.

Кроме общих переменных в формате можно использовать переменные,
существующие только на момент записи в лог:

$bytes_sent
число байт, переданное клиенту
$connection
порядковый номер соединения
$connection_requests
текущее число запросов в соединении (1.1.18)
$msec
время в секундах с точностью до миллисекунд на момент записи в лог
$pipe
p” если запрос был pipelined, иначе “.
$request_length
длина запроса (включая строку запроса, заголовок и тело запроса)
$request_time
время обработки запроса в секундах с точностью до миллисекунд;
время, прошедшее с момента чтения первых байт от клиента до
момента записи в лог после отправки последних байт клиенту
$status
статус ответа
$time_iso8601
локальное время в формате по стандарту ISO 8601
$time_local
локальное время в Common Log Format

В современных версиях nginx переменные
$status
(1.3.2, 1.2.2),
$bytes_sent
(1.3.8, 1.2.5),
$connection
(1.3.8, 1.2.5),
$connection_requests
(1.3.8, 1.2.5),
$msec
(1.3.9, 1.2.6),
$request_time
(1.3.9, 1.2.6),
$pipe
(1.3.12, 1.2.7),
$request_length
(1.3.12, 1.2.7),
$time_iso8601
(1.3.12, 1.2.7)
и
$time_local
(1.3.12, 1.2.7)
также доступны как общие переменные.

Строки заголовка, переданные клиенту, начинаются с префикса
sent_http_”, например,
$sent_http_content_range.

В конфигурации всегда существует предопределённый формат
combined”:

log_format combined '$remote_addr - $remote_user [$time_local] '
                    '"$request" $status $body_bytes_sent '
                    '"$http_referer" "$http_user_agent"';
Синтаксис: open_log_file_cache
max=N
[inactive=время]
[min_uses=N]
[valid=время];

open_log_file_cache off;
Умолчание:
open_log_file_cache off;
Контекст: http, server, location

Задаёт кэш, в котором хранятся дескрипторы файлов часто используемых
логов, имена которых заданы с использованием переменных.
Параметры директивы:

max
задаёт максимальное число дескрипторов в кэше;
при переполнении кэша наименее востребованные (LRU)
дескрипторы закрываются
inactive
задаёт время, после которого закэшированный дескриптор закрывается,
если к нему не было обращений в течение этого времени;
по умолчанию 10 секунд
min_uses
задаёт минимальное число использований файла в течение
времени, заданного параметром inactive,
после которого дескриптор файла будет оставаться открытым в кэше;
по умолчанию 1
valid
задаёт, через какое время нужно проверять, что файл ещё
существует под тем же именем;
по умолчанию 60 секунд
off
запрещает кэш

Пример использования:

open_log_file_cache max=1000 inactive=20s valid=1m min_uses=2;

I’m using Django with FastCGI + nginx. Where are the logs (errors) stored in this case?

Peter Mortensen's user avatar

asked Nov 10, 2009 at 7:09

ha22109's user avatar

Errors are stored in the nginx log file. You can specify it in the root of the nginx configuration file:

error_log  /var/log/nginx/nginx_error.log  warn;

On Mac OS X with Homebrew, the log file was found by default at the following location:

/usr/local/var/log/nginx

Peter Mortensen's user avatar

answered Nov 10, 2009 at 11:30

syava's user avatar

syavasyava

5,7681 gold badge16 silver badges2 bronze badges

3

I was looking for a different solution.

Error logs, by default, before any configuration is set, on my system (x86 Arch Linux), was found in:

/var/log/nginx/error.log

Peter Mortensen's user avatar

answered Sep 1, 2013 at 9:10

Ben's user avatar

BenBen

53.5k48 gold badges176 silver badges224 bronze badges

2

You can use lsof (list of open files) in most cases to find open log files without knowing the configuration.

Example:

Find the PID of httpd (the same concept applies for nginx and other programs):

$ ps aux | grep httpd
...
root     17970  0.0  0.3 495964 64388 ?        Ssl  Oct29   3:45 /usr/sbin/httpd
...

Then search for open log files using lsof with the PID:

$ lsof -p 17970 | grep log
httpd   17970 root    2w   REG             253,15     2278      6723 /var/log/httpd/error_log
httpd   17970 root   12w   REG             253,15        0      1387 /var/log/httpd/access_log

If lsof prints nothing, even though you expected the log files to be found, issue the same command using sudo.

You can read a little more here.

Peter Mortensen's user avatar

answered Dec 10, 2014 at 16:06

5

Run this command, to check error logs:

tail -f /var/log/nginx/error.log

ndmeiri's user avatar

ndmeiri

4,93812 gold badges35 silver badges44 bronze badges

answered Oct 5, 2015 at 15:37

Taimoor Changaiz's user avatar

Taimoor ChangaizTaimoor Changaiz

10k4 gold badges48 silver badges53 bronze badges

My ngninx logs are located here:

/usr/local/var/log/nginx/*

You can also check your nginx.conf to see if you have any directives dumping to custom log.

run nginx -t to locate your nginx.conf.

# in ngingx.conf
error_log  /usr/local/var/log/nginx/error.log;
error_log  /usr/local/var/log/nginx/error.log  notice;
error_log  /usr/local/var/log/nginx/error.log  info;

Nginx is usually set up in /usr/local or /etc/. The server could be configured to dump logs to /var/log as well.

If you have an alternate location for your nginx install and all else fails, you could use the find command to locate your file of choice.

find /usr/ -path "*/nginx/*" -type f -name '*.log', where /usr/ is the folder you wish to start searching from.

answered Dec 10, 2014 at 13:44

lfender6445's user avatar

lfender6445lfender6445

32.1k11 gold badges117 silver badges98 bronze badges

1

Logs location on Linux servers:

Apache – /var/log/httpd/

IIS – C:inetpubwwwroot

Node.js – /var/log/nodejs/

nginx – /var/log/nginx/

Passenger – /var/app/support/logs/

Puma – /var/log/puma/

Python – /opt/python/log/

Tomcat – /var/log/tomcat8

Peter Mortensen's user avatar

answered Sep 6, 2018 at 12:34

Syed Shibli's user avatar

Syed ShibliSyed Shibli

9821 gold badge12 silver badges15 bronze badges

Type this command in the terminal:

sudo cat /var/log/nginx/error.log

Peter Mortensen's user avatar

answered Jan 4, 2018 at 6:05

priyasha's user avatar

priyashapriyasha

4675 silver badges4 bronze badges

1

For Mac OS users, you can type nginx -help in your terminal.

nginx version: nginx/1.21.0
Usage: nginx [-?hvVtTq] [-s signal] [-p prefix]
             [-e filename] [-c filename] [-g directives]

Options:
  -?,-h         : this help
  -v            : show version and exit
  -V            : show version and configure options then exit
  -t            : test configuration and exit
  -T            : test configuration, dump it and exit
  -q            : suppress non-error messages during configuration testing
  -s signal     : send signal to a master process: stop, quit, reopen, reload
  -p prefix     : set prefix path (default: /opt/homebrew/Cellar/nginx/1.21.0/)
  -e filename   : set error log file (default: /opt/homebrew/var/log/nginx/error.log)
  -c filename   : set configuration file (default: /opt/homebrew/etc/nginx/nginx.conf)
  -g directives : set global directives out of configuration file

Then, you could find some default path for configuration and log files, in this case:

/opt/homebrew/log/nginx/error.log

answered Jun 26, 2021 at 3:48

minglyu's user avatar

minglyuminglyu

2,8352 gold badges12 silver badges31 bronze badges

cd /var/log/nginx/
cat error.log

Mariusz Jamro's user avatar

answered Jun 9, 2015 at 6:12

user4989001's user avatar

0

It is a good practice to set where the access log should be in nginx configuring file . Using acces_log /path/ Like this.

keyval $remote_addr:$http_user_agent $seen zone=clients;

server { listen 443 ssl;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers   HIGH:!aNULL:!MD5;

if ($seen = "") {
    set $seen  1;
    set $logme 1;
}
access_log  /tmp/sslparams.log sslparams if=$logme;
error_log  /pathtolog/error.log;
# ...
}

answered Jan 6, 2021 at 11:48

araldhafeeri's user avatar

I found it in /usr/local/nginx/logs/*.

Peter Mortensen's user avatar

answered Jul 16, 2019 at 11:36

mygeea's user avatar

mygeeamygeea

4693 silver badges9 bronze badges

2

Понравилась статья? Поделить с друзьями:
  • Nginx error log json
  • Nginx error log format
  • Nginx 408 error
  • Nginx 400 ошибка
  • Nginx error log docker