Apache HTTP Server Version 2.2
아파치 모듈 mod_log_config
설명: | 서버로의 요청을 로그에 기록한다 |
---|---|
상태: | Base |
모듈명: | log_config_module |
소스파일: | mod_log_config.c |
요약
이 모듈은 클라이언트의 요청을 로그에 자유롭게 기록한다. 자신이 원하는 형식으로 로그를 기록할 수 있고, 파일이나 외부 프로그램에 직접 로그를 보낼 수도 있다. 조건적 로그를 사용하면 요청의 성격에 따라 요청을 로그에 추가하거나 제외할 수 있다.
이 모듈은 세가지 지시어를 제공한다. TransferLog
는 로그파일을
만들고, LogFormat
은
원하는 형식을 정하고, CustomLog
는 한번에 로그파일과
형식을 모두 지정한다. TransferLog
와
CustomLog
지시어를 여러번 사용하면
요청을 여러 파일에 기록할 수 있다.
참고
로그 형식 지정하기
LogFormat
과
CustomLog
지시어의 형식 아규먼트는 문자열이다. 이 문자열에 따라 요청을
로그파일에 기록한다. 문자열에는 로그파일에 그대로 복사되는
문자와 행바꿈과 탭을 나타내는 C의 "\n"과 "\t" 제어문자를
사용할 수 있다. 로그파일에 따옴표나 백슬래쉬를 쓰려면 앞에
반드시 백슬래쉬를 적어줘야 한다.
요청의 특징은 형식 문자열에 "%
" 지시어를
사용하여 기록한다. 이 지시어는 로그파일에서 다음과 같이
변경된다.
형식 문자열 | 설명 | ||||||
---|---|---|---|---|---|---|---|
%% |
퍼센트 기호 | ||||||
%...a |
원격 IP-주소 | ||||||
%...A |
(서버) IP-주소 | ||||||
%...B |
HTTP 헤더를 제외한 전송 바이트수. | ||||||
%...b |
HTTP 헤더를 제외한 전송 바이트수. CLF 형식과 같이
전송한 내용이 없는 경우 0 대신 '- '가 나온다. | ||||||
%...{Foobar}C |
서버가 수신한 요청에서 Foobar 쿠키의 내용. | ||||||
%...D |
요청을 처리하는데 걸린 시간 (마이크로초 단위). | ||||||
%...{FOOBAR}e |
환경변수 FOOBAR의 내용 | ||||||
%...f |
파일명 | ||||||
%...h |
원격 호스트 | ||||||
%...H |
요청 프로토콜 | ||||||
%...{Foobar}i |
서버가 수신한 요청에서 Foobar:
헤더의 내용. | ||||||
%...l |
(있다면 identd가 제공한) 원격 로그인명.
mod_ident 가 있고 IdentityCheck 가
On 이 아니면 빼기기호를 기록한다. | ||||||
%...m |
요청 메써드 | ||||||
%...{Foobar}n |
다른 모듈이 기록한 Foobar 노트(note) 내용. | ||||||
%...{Foobar}o |
응답의 Foobar: 헤더 내용. | ||||||
%...p |
요청을 서비스하는 서버의 정규 포트 | ||||||
%...P |
요청을 서비스하는 자식의 프로세스 ID. | ||||||
%...{format}P |
요청을 서비스하는 자식의 프로세스 ID 혹은 쓰레드
ID. format에는 pid 와 tid 가
가능하다.
| ||||||
%...q |
질의문자열 (질의문자열이 있다면 앞에 ? 를
붙이고, 없다면 빈 문자열) | ||||||
%...r |
요청의 첫번째 줄 | ||||||
%...s |
상태(status). 내부 리다이렉션된 요청의 경우 *원래*
요청의 상태이다. 최종 요청의 상태는 %...>s . | ||||||
%...t |
common log format 시간 형식(표준 영어 형식)의 시간 | ||||||
%...{format}t |
strftime(3) 형식 format의 시간. (지역시간일
수 있음) | ||||||
%...T |
요청을 처리하는데 걸린 시간 (초 단위). | ||||||
%...u |
원격 사용자 (auth가 제공하며, 상태(%s )가
401인 경우 이상한 값을 나올 수 있음) | ||||||
%...U |
질의문자열을 제외한 요청 URL 경로. | ||||||
%...v |
요청을 서비스한 서버의 정규 ServerName . | ||||||
%...V |
UseCanonicalName
설정에 따른 서버명. | ||||||
%...X |
응답을 마쳤을때 연결 상태.
(아파치 1.3 후반 버전에서 이 지시어는
| ||||||
%...I |
요청과 헤더를 포함한 수신 바이트수로 0일 수 없다.
이를 사용하려면 mod_logio 가 필요하다. | ||||||
%...O |
헤더를 포함한 송신 바이트수로 0일 수 없다. 이를
사용하려면 mod_logio 가 필요하다. |
"..."에는 (예를 들어,
"%h %u %r %s %b"
) 아무것도 없거나, 항목을 포함할
조건이 나온다 (조건을 만족하지 않으면 자리에 "-"를 기록한다).
조건은 앞에 "!"를 붙이거나 안붙인 HTTP 상태코드 목록으로
작성한다. 예를 들어, "%400,501{User-agent}i"는 400 (Bad
Request) 오류와 501 (Not Implemented) 오류일때만
User-agent:
를 로그에 남기고,
"%!200,304,302{Referer}i"는 정상적인 상태가 아닌
모든 요청에 대해 Referer:
를 로그에 남긴다.
수정자 "<"와 ">"는 내부 리다이렉션된 요청에서 각각
처음 요청을 말할지 마지막 요청을 말할지 선택한다. 기본적으로
%s, %U, %T, %D, %r
은 처음 요청을 보고, 나머지
%
지시어는 마지막 요청을 본다. 그래서
%>s
는 요청의 마지막 상태(status)를 기록하고,
%<u
는 인증으로 보호하지 않는 자원으로 내부
라다이렉션된 경우에도 처음에 인증한 사용자를 기록한다.
2.0.46 이전의 httpd 2.0 버전은 %...r
,
%...i
, %...o
의 결과 문자열을 그대로
두었다. 이유는 Common Log Format의 요구사항을 따르기위해서였다.
즉, 클라이언트가 제어문자를 로그에 집어넣을 수 있기때문에
로그파일을 그대로 다룰 때는 조심해야 한다.
보안상 이유로 2.0.46부터 출력할 수 없는 문자나 다른 특수문자를
\xhh
로 표현한다. 여기서 hh는
해당 바이트의 16진수 표현을 나타낸다. 이 규칙의 예외는 백슬래쉬를
앞에 붙이는 "
와 \
, 그리고 C언어
형식의 공백문자들(\n
, \t
등)이다.
일반적으로 많이 사용하는 로그 형식은 다음과 같다.
- Common Log Format (CLF)
"%h %l %u %t \"%r\" %>s %b"
- 가상호스트 정보를 포함한 Common Log Format
"%v %h %l %u %t \"%r\" %>s %b"
- NCSA extended/combined 로그 형식
"%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\""
- Referer 로그 형식
"%{Referer}i -> %U"
- Agent (브라우저) 로그 형식
"%{User-agent}i"
요청을 서비스하는 서버의 정규 ServerName
과 Listen
은 각각 %v
와
%p
를 사용한다. 로그분석 프로그램이 실제로 요청을
서비스하는 호스트를 알기위해 가상호스트 찾기 알고리즘을
가질 필요없도록 이들 값은 UseCanonicalName
설정과 무관하다.
BufferedLogs 지시어
설명: | Buffer log entries in memory before writing to disk |
---|---|
문법: | BufferedLogs On|Off |
기본값: | BufferedLogs Off |
사용장소: | 주서버설정 |
상태: | Base |
모듈: | mod_log_config |
지원: | Available in versions 2.0.41 and later. |
The documentation for this directive has not been translated yet. Please have a look at the English version.
CookieLog 지시어
설명: | 쿠키를 로그에 남기기위해 사용할 파일명을 설정한다 |
---|---|
문법: | CookieLog filename |
사용장소: | 주서버설정, 가상호스트 |
상태: | Base |
모듈: | mod_log_config |
지원: | 이 지시어는 사용되지 않는다. |
CookieLog
지시어는 쿠키를 로그에
남기기위해 사용할 파일명을 설정한다. 파일명은 ServerRoot
에 상대경로이다. 이
지시어는 mod_cookies
와 호환을 위해 포함했을뿐,
실제 사용되지 않는다.
CustomLog 지시어
설명: | 로그파일 이름과 형식을 지정한다 |
---|---|
문법: | CustomLog file|pipe
format|nickname
[env=[!]environment-variable] |
사용장소: | 주서버설정, 가상호스트 |
상태: | Base |
모듈: | mod_log_config |
서버가 요청을 로그에 남길때 CustomLog
지시어를 사용한다. 로그 형식을 지정하고, 환경변수를 사용하여
요청의 특징에 따라 선택적으로 로그를 남길 수도 있다.
로그를 기록할 장소를 지정하는 첫번째 아규먼트에는 다음 둘중 하나를 사용한다.
- file
ServerRoot
에 상대적인 파일명.- pipe
- 파이프문자 "
|
"뒤에 로그 정보를 표준입력으로 받을 프로그램 경로를 적는다.보안:
프로그램을 사용한다면 프로그램은 웹서버를 시작한 사용자 권한으로 실행된다. 서버를 root로 시작한다면 프로그램도 root로 실행하므로 프로그램이 안전한지 확인하라.
주의
유닉스가 아닌 플래폼에서 파일경로를 입력할때 플래폼이 백슬래쉬를 사용하더라도 반드시 슬래쉬를 사용해야 한다. 일반적으로 설정파일에서는 항상 슬래쉬를 사용하는 것이 좋다.
두번째 아규먼트는 로그파일에 기록할 내용을 지정한다.
전에 LogFormat
으로
정의한 nickname을 사용하거나 직접 로그 형식 절에서 설명한 format
문자열을 사용할 수 있다.
예를 들어, 다음 두 지시어는 똑같은 일을 한다.
# 형식 별칭을 사용한 CustomLog
LogFormat "%h %l %u %t \"%r\" %>s %b" common
CustomLog logs/access_log common
# 직접 형식 문자열을 사용한 CustomLog
CustomLog logs/access_log "%h %l %u %t \"%r\" %>s %b"
세번째 아규먼트는 없어도 되며, 특정 서버 환경변수 유무에
따라 요청을 로그에 기록할지 여부를 결정한다. 요청에 지정한
환경변수가 정의되있다면 (혹은
'env=!name
'를 사용한 경우 없다면)
요청을 로그에 기록한다.
mod_setenvif
나 mod_rewrite
모듈을 사용하여 요청별로 환경변수를 설정할 수 있다. 예를
들어, 서버가 GIF 그림에 대한 모든 요청을 주서버 로그가 아닌
다른 로그파일에 기록하려면,
SetEnvIf Request_URI \.gif$ gif-image
CustomLog gif-requests.log common env=gif-image
CustomLog nongif-requests.log common env=!gif-image
LogFormat 지시어
설명: | 로그파일에 사용할 형식을 기술한다 |
---|---|
문법: | LogFormat format|nickname
[nickname] |
기본값: | LogFormat "%h %l %u %t \"%r\" %>s %b" |
사용장소: | 주서버설정, 가상호스트 |
상태: | Base |
모듈: | mod_log_config |
이 지시어는 접근 로그파일의 형식을 지정한다.
LogFormat
지시어는 두가지 형식으로
사용한다. 첫번째 형식은 아규먼트를 한개만 사용하여 다음
TransferLog
지시어들이 사용할 로그
형식을 지정한다. 이 아규먼트에 위의 로그
형식 지정하기 절에서 설명한 format을 직접
사용하거나, 다음에 설명할 LogFormat
지시어로 미리 정의한 (로그 형식을 지칭하는) nickname을
사용할 수 있다.
LogFormat
지시어의 두번째 형식은
format과 nickname을 연결한다. 그러면
뒤에서 사용하는 LogFormat
이나 CustomLog
지시어에 반복해서
형식 문자열을 모두 입력하는 대신 nickname을 사용할
수 있다. 별칭을 정의하는 LogFormat
지시어는 이 외에는 아무 기능을 하지 않는다.
즉, 별칭만을 정의하며, 실제로 형식을 적용하거나
형식을 기본값으로 만들지 않는다. 그러므로 다음에 나오는
TransferLog
지시어에 영향을 주지 않는다. 또,
LogFormat
은 별칭으로 다른 별칭을
정의할 수 있다. 별칭 이름에는 퍼센트 기호(%
)를
사용할 수 없음을 주의하라.
예제
LogFormat "%v %h %l %u %t \"%r\" %>s %b" vhost_common
TransferLog 지시어
설명: | 로그파일 위치를 설정한다 |
---|---|
문법: | TransferLog file|pipe |
사용장소: | 주서버설정, 가상호스트 |
상태: | Base |
모듈: | mod_log_config |
이 지시어는 CustomLog
지시어와 아규먼트와
기능이 비슷하지만, 로그 형식을 직접 지정하거나 요청을 조건에
따라 로그에 남길 수 없다. 대신 가장 최근 사용한 (별칭을
정의하지 않은) LogFormat
지시어가 지정한
로그 형식을 사용한다. 미리 형식을 지정하지 않았다면 Common
Log Format을 사용한다.
예제
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\""
TransferLog logs/access_log