ngx_http_log_module

ngx_http_log_module 모듈은 지정된 형식으로 요청 로그를 작성합니다.

요청은 처리가 종료되는 위치에 따라 로깅됩니다. 요청 처리 중에 내부 리디렉션이 발생하면 원래 위치와 달라질 수 있습니다.

예제 구성

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;

 

Directives

Syntax:  access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
         access_log off;
Default: access_log logs/access.log combined;
Context: http, server, location, if in 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(최저 속도, 최대 압축) 사이로 설정할 수 있습니다. 기본적으로 버퍼 용량은 64K 바이트와 같고, 압축 수준은 1로 설정됩니다. 데이터가 원자성 블록에 압축되므로 로그 파일은 언제든 압축을 해제하거나 “zcat”으로 읽을 수 있습니다.

예:

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

gzip 압축이 작동하려면 zlib 라이브러리로 nginx를 구축해야 합니다.

파일 경로에는 변수(0.7.6+)가 포함될 수 있지만, 이런 로그에는 제약이 있습니다.

  • 작업자 프로세스가 자격 증명을 사용하는 사용자는 해당 로그가 있는 디렉터리에 파일을 생성할 권한이 있어야 합니다.
  • 버퍼가 들어간 쓰기는 작동하지 않습니다.
  • 로그를 쓸 때마다 파일을 열었다 닫습니다. 그러나 자주 사용하는 파일의 설명은 캐시에 저장되고, open_log_file_cache 명령의 valid 매개변수에서 지정한 시간 동안 이전 파일에 쓰기를 계속할 수 있습니다.
  • 각 로그를 쓰는 동안 요청의 루트 디렉터리가 존재하는지 확인하고, 존재하지 않을 경우 로그를 생성하지 않습니다. 따라서 동일한 구성 수준에서 root와 access_log를 지정하는 것이 좋습니다.
server {
    root       /spool/vhost/data/$host;
    access_log /spool/vhost/logs/$host;
    ...

if 매개변수(1.7.0)는 조건적 로깅을 지원합니다. condition이 “0” 또는 빈 문자열일 경우, 요청이 로깅되지 않습니다. 다음의 예시에서 응답 코드 2xx와 3xx가 있는 요청은 로깅되지 않습니다.

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

access_log /path/to/access.log combined if=$loggable;
Syntax:  log_format name [escape=default|json|none] string ...;
Default: log_format combined "...";
Context: http

로그 형식을 지정합니다.

escape 매개변수(1.11.8)를 사용하면 변수에서 json 또는 default 문자 이스케이프를 설정할 수 있습니다. 기본적으로 default 이스케이프를 사용합니다. none 값(1.13.10)은 이스케이프를 비활성화합니다.

default 이스케이프의 경우 “””, “\” 문자와 값이 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”(요청이 파이프라인화된 경우), “.”(그 외의 다른 경우)

$request_length

요청 길이(요청 행, 헤더, 요청 본문 포함)

$request_time

밀리초 단위로 측정한 요청 처리 시간(초), 클라이언트에서 첫 바이트를 읽은 시점부터 클라이언트에 마지막 바이트를 보내고 로그를 작성한 시점까지 경과된 시간

$status

응답 상태

$time_iso8601

ISO 8601 표준 형식의 로컬 시간

$time_local

공통 로그 형식의 로컬 시간

최신 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"';
Syntax:  open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];
         open_log_file_cache off;
Default: open_log_file_cache off;
Context: 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;