이 모듈은 클라이언트의 요청을 로그에 자유롭게 기록한다. 자신이 원하는 형식으로 로그를 기록할 수 있고, 파일이나 외부 프로그램에 직접 로그를 보낼 수도 있다. 조건적 로그를 사용하면 요청의 성격에 따라 요청을 로그에 추가하거나 제외할 수 있다.
이 모듈은 세가지 지시어를 제공한다.
요청의 특징은 형식 문자열에 "%" 지시어를
사용하여 기록한다. 이 지시어는 로그파일에서 다음과 같이
변경된다.
| 형식 문자열 | 설명 | ||||||
|---|---|---|---|---|---|---|---|
%% |
퍼센트 기호 | ||||||
%...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가 제공한) 원격 로그인명.
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 |
요청을 서비스한 서버의 정규 | ||||||
%...V |
|||||||
%...X |
응답을 마쳤을때 연결 상태.
(아파치 1.3 후반 버전에서 이 지시어는
| ||||||
%...I |
요청과 헤더를 포함한 수신 바이트수로 0일 수 없다.
이를 사용하려면 | ||||||
%...O |
헤더를 포함한 송신 바이트수로 0일 수 없다. 이를
사용하려면 |
"..."에는 (예를 들어,
"%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 등)이다.
일반적으로 많이 사용하는 로그 형식은 다음과 같다.
"%h %l %u %t \"%r\" %>s %b""%v %h %l %u %t \"%r\" %>s %b""%h %l %u %t \"%r\" %>s %b \"%{Referer}i\"
\"%{User-agent}i\"""%{Referer}i -> %U""%{User-agent}i"요청을 서비스하는 서버의 정규 %v와
%p를 사용한다. 로그분석 프로그램이 실제로 요청을
서비스하는 호스트를 알기위해 가상호스트 찾기 알고리즘을
가질 필요없도록 이들 값은
서버를 시작하는 사용자외에 다른 사용자가 로그파일을 저장하는 디렉토리에 쓰기 권한을 가질때 왜 보안에 문제가 생기는지 보안 팁 문서를 참고하라.
mod_cookies와 호환을 위해 포함했을뿐,
실제 사용되지 않는다.
서버가 요청을 로그에 남길때
로그를 기록할 장소를 지정하는 첫번째 아규먼트에는 다음 둘중 하나를 사용한다.
|"뒤에 로그 정보를 표준입력으로
받을 프로그램 경로를 적는다.
프로그램을 사용한다면 프로그램은 웹서버를 시작한 사용자 권한으로 실행된다. 서버를 root로 시작한다면 프로그램도 root로 실행하므로 프로그램이 안전한지 확인하라.
유닉스가 아닌 플래폼에서 파일경로를 입력할때 플래폼이 백슬래쉬를 사용하더라도 반드시 슬래쉬를 사용해야 한다. 일반적으로 설정파일에서는 항상 슬래쉬를 사용하는 것이 좋다.
두번째 아규먼트는 로그파일에 기록할 내용을 지정한다.
전에
예를 들어, 다음 두 지시어는 똑같은 일을 한다.
세번째 아규먼트는 없어도 되며, 특정 서버 환경변수 유무에
따라 요청을 로그에 기록할지 여부를 결정한다. 요청에 지정한
환경변수가 정의되있다면 (혹은
'env=!name'를 사용한 경우 없다면)
요청을 로그에 기록한다.
이 지시어는 접근 로그파일의 형식을 지정한다.
%)를
사용할 수 없음을 주의하라.
이 지시어는