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 |