1
0
mirror of https://github.com/apache/httpd.git synced 2025-05-30 01:07:09 +03:00
apache/docs/manual/mod/mod_log_config.xml.ko
André Malo ef27013c2f update revision references
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@421136 13f79535-47bb-0310-9956-ffa450edef68
2006-07-12 05:37:53 +00:00

422 lines
16 KiB
XML

<?xml version="1.0" encoding="EUC-KR" ?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
<!-- English Revision: 105989:420990 (outdated) -->
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<modulesynopsis metafile="mod_log_config.xml.meta">
<name>mod_log_config</name>
<description>서버로의 요청을 로그에 기록한다</description>
<status>Base</status>
<sourcefile>mod_log_config.c</sourcefile>
<identifier>log_config_module</identifier>
<summary>
<p>이 모듈은 클라이언트의 요청을 로그에 자유롭게 기록한다.
자신이 원하는 형식으로 로그를 기록할 수 있고, 파일이나 외부
프로그램에 직접 로그를 보낼 수도 있다. 조건적 로그를 사용하면
요청의 성격에 따라 요청을 로그에 추가하거나 제외할 수 있다.</p>
<p>이 모듈은 세가지 지시어를 제공한다. <directive
module="mod_log_config">TransferLog</directive>는 로그파일을
만들고, <directive module="mod_log_config">LogFormat</directive>
원하는 형식을 정하고, <directive
module="mod_log_config">CustomLog</directive>는 한번에 로그파일과
형식을 모두 지정한다. <directive>TransferLog</directive>
<directive>CustomLog</directive> 지시어를 여러번 사용하면
요청을 여러 파일에 기록할 수 있다.</p>
</summary>
<seealso><a href="../logs.html">아파치 로그파일</a></seealso>
<section id="formats"><title>로그 형식 지정하기</title>
<p><directive module="mod_log_config">LogFormat</directive>
<directive module="mod_log_config">CustomLog</directive>
지시어의 형식 아규먼트는 문자열이다. 이 문자열에 따라 요청을
로그파일에 기록한다. 문자열에는 로그파일에 그대로 복사되는
문자와 행바꿈과 탭을 나타내는 C의 "\n"과 "\t" 제어문자를
사용할 수 있다. 로그파일에 따옴표나 백슬래쉬를 쓰려면 앞에
반드시 백슬래쉬를 적어줘야 한다.</p>
<p>요청의 특징은 형식 문자열에 "<code>%</code>" 지시어를
사용하여 기록한다. 이 지시어는 로그파일에서 다음과 같이
변경된다.</p>
<table border="1" style="zebra">
<columnspec><column width=".2"/><column width=".8"/></columnspec>
<tr><th>형식&nbsp;문자열</th>
<th>설명</th></tr>
<tr><td><code>%%</code></td>
<td>퍼센트 기호</td></tr>
<tr><td><code>%...a</code></td>
<td>원격 IP-주소</td></tr>
<tr><td><code>%...A</code></td>
<td>(서버) IP-주소</td></tr>
<tr><td><code>%...B</code></td>
<td>HTTP 헤더를 제외한 전송 바이트수.</td></tr>
<tr><td><code>%...b</code></td>
<td>HTTP 헤더를 제외한 전송 바이트수. CLF 형식과 같이
전송한 내용이 없는 경우 0 대신 '<code>-</code>'가 나온다.</td></tr>
<tr><td><code>%...{<var>Foobar</var>}C</code></td>
<td>서버가 수신한 요청에서 <var>Foobar</var> 쿠키의
내용.</td></tr>
<tr><td><code>%...D</code></td>
<td>요청을 처리하는데 걸린 시간 (마이크로초 단위).</td></tr>
<tr><td><code>%...{<var>FOOBAR</var>}e</code></td>
<td>환경변수 <var>FOOBAR</var>의 내용</td></tr>
<tr><td><code>%...f</code></td>
<td>파일명</td></tr>
<tr><td><code>%...h</code></td>
<td>원격 호스트</td></tr>
<tr><td><code>%...H</code></td>
<td>요청 프로토콜</td></tr>
<tr><td><code>%...{<var>Foobar</var>}i</code></td>
<td>서버가 수신한 요청에서 <code><var>Foobar</var>:</code>
헤더의 내용.</td></tr>
<tr><td><code>%...l</code></td>
<td>(있다면 identd가 제공한) 원격 로그인명.
<module>mod_ident</module>가 있고 <directive
module="mod_ident">IdentityCheck</directive>
<code>On</code>이 아니면 빼기기호를 기록한다.</td></tr>
<tr><td><code>%...m</code></td>
<td>요청 메써드</td></tr>
<tr><td><code>%...{<var>Foobar</var>}n</code></td>
<td>다른 모듈이 기록한 <var>Foobar</var> 노트(note)
내용.</td></tr>
<tr><td><code>%...{<var>Foobar</var>}o</code></td>
<td>응답의 <code><var>Foobar</var>:</code> 헤더 내용.</td></tr>
<tr><td><code>%...p</code></td>
<td>요청을 서비스하는 서버의 정규 포트</td></tr>
<tr><td><code>%...P</code></td>
<td>요청을 서비스하는 자식의 프로세스 ID.</td></tr>
<tr><td><code>%...{<var>format</var>}P</code></td>
<td>요청을 서비스하는 자식의 프로세스 ID 혹은 쓰레드
ID. format에는 <code>pid</code><code>tid</code>
가능하다.
</td></tr>
<tr><td><code>%...q</code></td>
<td>질의문자열 (질의문자열이 있다면 앞에 <code>?</code>
붙이고, 없다면 빈 문자열)</td></tr>
<tr><td><code>%...r</code></td>
<td>요청의 첫번째 줄</td></tr>
<tr><td><code>%...s</code></td>
<td>상태(status). 내부 리다이렉션된 요청의 경우 *원래*
요청의 상태이다. 최종 요청의 상태는 <code>%...&gt;s</code>.</td></tr>
<tr><td><code>%...t</code></td>
<td>common log format 시간 형식(표준 영어 형식)의 시간</td></tr>
<tr><td><code>%...{<var>format</var>}t</code></td>
<td><code>strftime(3)</code> 형식 format의 시간. (지역시간일
수 있음)</td></tr>
<tr><td><code>%...T</code></td>
<td>요청을 처리하는데 걸린 시간 (초 단위).</td></tr>
<tr><td><code>%...u</code></td>
<td>원격 사용자 (auth가 제공하며, 상태(<code>%s</code>)가
401인 경우 이상한 값을 나올 수 있음)</td></tr>
<tr><td><code>%...U</code></td>
<td>질의문자열을 제외한 요청 URL 경로.</td></tr>
<tr><td><code>%...v</code></td>
<td>요청을 서비스한 서버의 정규 <directive
module="core">ServerName</directive>.</td></tr>
<tr><td><code>%...V</code></td>
<td><directive module="core">UseCanonicalName</directive>
설정에 따른 서버명.</td></tr>
<tr><td><code>%...X</code></td>
<td>응답을 마쳤을때 연결 상태.
<table>
<columnspec><column width=".2"/><column width=".6"/></columnspec>
<tr><td><code>X</code> =</td>
<td>응답을 마치기 전에 연결이 끊어졌다.</td></tr>
<tr><td><code>+</code> =</td>
<td>응답을 보낸후에도 연결이 살아있다(keep alive).</td></tr>
<tr><td><code>-</code> = </td>
<td>응답을 보낸후 연결이 끊어졌다.</td></tr>
</table>
<p>(아파치 1.3 후반 버전에서 이 지시어는
<code>%...c</code>였지만, 전통적인 ssl
<code>%...{<var>var</var>}c</code> 문법과 겹쳐서
변경했다.)</p></td></tr>
<tr><td><code>%...I</code></td>
<td>요청과 헤더를 포함한 수신 바이트수로 0일 수 없다.
이를 사용하려면 <module>mod_logio</module>가 필요하다.</td></tr>
<tr><td><code>%...O</code></td>
<td>헤더를 포함한 송신 바이트수로 0일 수 없다. 이를
사용하려면 <module>mod_logio</module>가 필요하다.</td></tr>
</table>
<p>"<var>...</var>"에는 (<em>예를 들어</em>,
<code>"%h %u %r %s %b"</code>) 아무것도 없거나, 항목을 포함할
조건이 나온다 (조건을 만족하지 않으면 자리에 "-"를 기록한다).
조건은 앞에 "!"를 붙이거나 안붙인 HTTP 상태코드 목록으로
작성한다. 예를 들어, "%400,501{User-agent}i"는 400 (Bad
Request) 오류와 501 (Not Implemented) 오류일때만
<code>User-agent:</code>를 로그에 남기고,
"%!200,304,302{Referer}i"는 정상적인 상태가 <em>아닌</em>
모든 요청에 대해 <code>Referer:</code>를 로그에 남긴다.</p>
<p>수정자 "&lt;"와 "&gt;"는 내부 리다이렉션된 요청에서 각각
처음 요청을 말할지 마지막 요청을 말할지 선택한다. 기본적으로
<code>%s, %U, %T, %D, %r</code>은 처음 요청을 보고, 나머지
<code>%</code> 지시어는 마지막 요청을 본다. 그래서
<code>%&gt;s</code>는 요청의 마지막 상태(status)를 기록하고,
<code>%&lt;u</code>는 인증으로 보호하지 않는 자원으로 내부
라다이렉션된 경우에도 처음에 인증한 사용자를 기록한다.</p>
<p>2.0.46 이전의 httpd 2.0 버전은 <code>%...r</code>,
<code>%...i</code>, <code>%...o</code>의 결과 문자열을 그대로
두었다. 이유는 Common Log Format의 요구사항을 따르기위해서였다.
즉, 클라이언트가 제어문자를 로그에 집어넣을 수 있기때문에
로그파일을 그대로 다룰 때는 조심해야 한다.</p>
<p>보안상 이유로 2.0.46부터 출력할 수 없는 문자나 다른 특수문자를
<code>\x<var>hh</var></code>로 표현한다. 여기서 <var>hh</var>
해당 바이트의 16진수 표현을 나타낸다. 이 규칙의 예외는 백슬래쉬를
앞에 붙이는 <code>"</code><code>\</code>, 그리고 C언어
형식의 공백문자들(<code>\n</code>, <code>\t</code> 등)이다.</p>
<p>일반적으로 많이 사용하는 로그 형식은 다음과 같다.</p>
<dl>
<dt>Common Log Format (CLF)</dt>
<dd><code>"%h %l %u %t \"%r\" %&gt;s %b"</code></dd>
<dt>가상호스트 정보를 포함한 Common Log Format</dt>
<dd><code>"%v %h %l %u %t \"%r\" %&gt;s %b"</code></dd>
<dt>NCSA extended/combined 로그 형식</dt>
<dd><code>"%h %l %u %t \"%r\" %&gt;s %b \"%{Referer}i\"
\"%{User-agent}i\""</code></dd>
<dt>Referer 로그 형식</dt>
<dd><code>"%{Referer}i -&gt; %U"</code></dd>
<dt>Agent (브라우저) 로그 형식</dt>
<dd><code>"%{User-agent}i"</code></dd>
</dl>
<p>요청을 서비스하는 서버의 정규 <directive
module="core">ServerName</directive><directive
module="mpm_common">Listen</directive>은 각각 <code>%v</code>
<code>%p</code>를 사용한다. 로그분석 프로그램이 실제로 요청을
서비스하는 호스트를 알기위해 가상호스트 찾기 알고리즘을
가질 필요없도록 이들 값은 <directive
module="core">UseCanonicalName</directive> 설정과 무관하다.</p>
</section>
<section id="security"><title>보안상 고려할 점</title>
<p>서버를 시작하는 사용자외에 다른 사용자가 로그파일을 저장하는
디렉토리에 쓰기 권한을 가질때 왜 보안에 문제가 생기는지
<a href="../misc/security_tips.html#serverroot">보안 팁</a>
문서를 참고하라.</p>
</section>
<directivesynopsis>
<name>CookieLog</name>
<description>쿠키를 로그에 남기기위해 사용할 파일명을 설정한다</description>
<syntax>CookieLog <var>filename</var></syntax>
<contextlist><context>server config</context><context>virtual host</context>
</contextlist>
<compatibility>이 지시어는 사용되지 않는다.</compatibility>
<usage>
<p><directive>CookieLog</directive> 지시어는 쿠키를 로그에
남기기위해 사용할 파일명을 설정한다. 파일명은 <directive
module="core">ServerRoot</directive>에 상대경로이다. 이
지시어는 <code>mod_cookies</code>와 호환을 위해 포함했을뿐,
실제 사용되지 않는다.</p>
</usage>
</directivesynopsis>
<directivesynopsis>
<name>CustomLog</name>
<description>로그파일 이름과 형식을 지정한다</description>
<syntax>CustomLog <var>file</var>|<var>pipe</var>
<var>format</var>|<var>nickname</var>
[env=[!]<var>environment-variable</var>]</syntax>
<contextlist><context>server config</context><context>virtual host</context>
</contextlist>
<usage>
<p>서버가 요청을 로그에 남길때 <directive>CustomLog</directive>
지시어를 사용한다. 로그 형식을 지정하고, 환경변수를 사용하여
요청의 특징에 따라 선택적으로 로그를 남길 수도 있다.</p>
<p>로그를 기록할 장소를 지정하는 첫번째 아규먼트에는 다음
둘중 하나를 사용한다.</p>
<dl>
<dt><var>file</var></dt>
<dd><directive module="core">ServerRoot</directive>
상대적인 파일명.</dd>
<dt><var>pipe</var></dt>
<dd>파이프문자 "<code>|</code>"뒤에 로그 정보를 표준입력으로
받을 프로그램 경로를 적는다.
<note type="warning"><title>보안:</title>
<p>프로그램을 사용한다면 프로그램은 웹서버를 시작한 사용자
권한으로 실행된다. 서버를 root로 시작한다면 프로그램도
root로 실행하므로 프로그램이 안전한지 확인하라.</p>
</note>
<note type="warning"><title>주의</title>
<p>유닉스가 아닌 플래폼에서 파일경로를 입력할때 플래폼이
백슬래쉬를 사용하더라도 반드시 슬래쉬를 사용해야 한다.
일반적으로 설정파일에서는 항상 슬래쉬를 사용하는 것이
좋다.</p>
</note></dd>
</dl>
<p>두번째 아규먼트는 로그파일에 기록할 내용을 지정한다.
전에 <directive module="mod_log_config">LogFormat</directive>으로
정의한 <var>nickname</var>을 사용하거나 직접 <a
href="#formats">로그 형식</a> 절에서 설명한 <var>format</var>
문자열을 사용할 수 있다.</p>
<p>예를 들어, 다음 두 지시어는 똑같은 일을 한다.</p>
<example>
# 형식 별칭을 사용한 CustomLog<br />
LogFormat "%h %l %u %t \"%r\" %&gt;s %b" common<br />
CustomLog logs/access_log common<br />
<br />
# 직접 형식 문자열을 사용한 CustomLog<br />
CustomLog logs/access_log "%h %l %u %t \"%r\" %&gt;s %b"
</example>
<p>세번째 아규먼트는 없어도 되며, 특정 서버 환경변수 유무에
따라 요청을 로그에 기록할지 여부를 결정한다. 요청에 지정한
<a href="../env.html">환경변수</a>가 정의되있다면 (혹은
'<code>env=!<var>name</var></code>'를 사용한 경우 없다면)
요청을 로그에 기록한다.</p>
<p><module>mod_setenvif</module><module>mod_rewrite</module>
모듈을 사용하여 요청별로 환경변수를 설정할 수 있다. 예를
들어, 서버가 GIF 그림에 대한 모든 요청을 주서버 로그가 아닌
다른 로그파일에 기록하려면,</p>
<example>
SetEnvIf Request_URI \.gif$ gif-image<br />
CustomLog gif-requests.log common env=gif-image<br />
CustomLog nongif-requests.log common env=!gif-image
</example>
</usage>
</directivesynopsis>
<directivesynopsis>
<name>LogFormat</name>
<description>로그파일에 사용할 형식을 기술한다</description>
<syntax>LogFormat <var>format</var>|<var>nickname</var>
[<var>nickname</var>]</syntax>
<default>LogFormat "%h %l %u %t \"%r\" %>s %b"</default>
<contextlist><context>server config</context><context>virtual host</context>
</contextlist>
<usage>
<p>이 지시어는 접근 로그파일의 형식을 지정한다.</p>
<p><directive>LogFormat</directive> 지시어는 두가지 형식으로
사용한다. 첫번째 형식은 아규먼트를 한개만 사용하여 다음
<directive>TransferLog</directive> 지시어들이 사용할 로그
형식을 지정한다. 이 아규먼트에 위의 <a href="#formats">로그
형식 지정하기</a> 절에서 설명한 <var>format</var>을 직접
사용하거나, 다음에 설명할 <directive>LogFormat</directive>
지시어로 미리 정의한 (로그 형식을 지칭하는) <var>nickname</var>
사용할 수 있다.</p>
<p><directive>LogFormat</directive> 지시어의 두번째 형식은
<var>format</var><var>nickname</var>을 연결한다. 그러면
뒤에서 사용하는 <directive>LogFormat</directive>이나 <directive
module="mod_log_config">CustomLog</directive> 지시어에 반복해서
형식 문자열을 모두 입력하는 대신 <var>nickname</var>을 사용할
수 있다. 별칭을 정의하는 <directive>LogFormat</directive>
지시어는 <strong>이 외에는 아무 기능을 하지 않는다</strong>.
즉, 별칭<em></em>을 정의하며, 실제로 형식을 적용하거나
형식을 기본값으로 만들지 않는다. 그러므로 다음에 나오는
<directive module="mod_log_config">TransferLog</directive>
지시어에 영향을 주지 않는다. 또,
<directive>LogFormat</directive>은 별칭으로 다른 별칭을
정의할 수 있다. 별칭 이름에는 퍼센트 기호(<code>%</code>)를
사용할 수 없음을 주의하라.</p>
<example><title>예제</title>
LogFormat "%v %h %l %u %t \"%r\" %&gt;s %b" vhost_common
</example>
</usage>
</directivesynopsis>
<directivesynopsis>
<name>TransferLog</name>
<description>로그파일 위치를 설정한다</description>
<syntax>TransferLog <var>file</var>|<var>pipe</var></syntax>
<contextlist><context>server config</context><context>virtual host</context>
</contextlist>
<usage>
<p>이 지시어는 <directive
module="mod_log_config">CustomLog</directive> 지시어와 아규먼트와
기능이 비슷하지만, 로그 형식을 직접 지정하거나 요청을 조건에
따라 로그에 남길 수 없다. 대신 가장 최근 사용한 (별칭을
정의하지 않은) <directive
module="mod_log_config">LogFormat</directive> 지시어가 지정한
로그 형식을 사용한다. 미리 형식을 지정하지 않았다면 Common
Log Format을 사용한다.</p>
<example><title>예제</title>
LogFormat "%h %l %u %t \"%r\" %&gt;s %b \"%{Referer}i\" \"%{User-agent}i\""<br />
TransferLog logs/access_log
</example>
</usage>
</directivesynopsis>
</modulesynopsis>