LogFormat
과 CustomLog
지시어의 형식 아규먼트는 문자열이다. 이 문자열에 따라 요청을 로그파일에 기록한다. 문자열에는 로그파일에 그대로 복사되는 문자와 행바꿈과 탭을 나타내는 C의 "\n"과 "\t" 제어문자를 사용할 수 있다. 로그파일에 따옴표나 백슬래쉬를 쓰려면 앞에 반드시 백슬래쉬를 적어줘야 한다.요청의 특징은 형식 문자열에 "
%
" 지시어를 사용하여 기록한다. 이 지시어는 로그파일에서 다음과 같이 변경된다.형식 문자열 | 설명 | ||||||
---|---|---|---|---|---|---|---|
%% |
퍼센트 기호 (아파치 2.0.44 이후) | ||||||
%...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가 제공한) 원격 로그인명. IdentityCheck 가 On 이 아니면 빼기기호를 기록한다. |
||||||
%...m |
요청 메써드 | ||||||
%...{Foobar}n |
다른 모듈이 기록한 Foobar 노트(note) 내용. | ||||||
%...{Foobar}o |
응답의 Foobar: 헤더 내용. |
||||||
%...p |
요청을 서비스하는 서버의 정규 포트 | ||||||
%...P |
요청을 서비스하는 자식의 프로세스 ID. | ||||||
%...{format}P |
요청을 서비스하는 자식의 프로세스 ID 혹은 쓰레드 ID. format에는 pid 와 tid 가 가능하다. (아파치 2.0.46 이후) |
||||||
%...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 후반 버전에서 이 지시어는
%...c 였지만, 전통적인 ssl %...{var}c 문법과 겹쳐서 변경했다.) |
||||||
%...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
설정과 무관하다.
그림 파일 로그 남기지 않게 하기
SetEnvIfNoCase Request_URI (gif|png|jpg|css|js|bmp|jpeg|swf)$ IMAGE=1
CustomLog /usr/local/apache/logs/access_log common env=!IMAGE
이렇게 하면 끝난다.
이 글은 스프링노트에서 작성되었습니다.
'Computer > LINUX' 카테고리의 다른 글
아파치 로그 (0) | 2012.08.10 |
---|---|
아파치 2 최적화 (0) | 2012.08.10 |
Openssl 설치법 (0) | 2012.08.10 |
mod_expire (0) | 2012.08.10 |
mod_cband (apache 2.x) 다른거 (0) | 2012.08.10 |