<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>OurApache &#187; log</title>
	<atom:link href="http://ourapache.com/archives/tag/log/feed" rel="self" type="application/rss+xml" />
	<link>http://ourapache.com</link>
	<description>我们致力于一个Apache知识的分享网站</description>
	<lastBuildDate>Tue, 13 Apr 2010 05:18:24 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>玩转apache之日志</title>
		<link>http://ourapache.com/archives/243</link>
		<comments>http://ourapache.com/archives/243#comments</comments>
		<pubDate>Mon, 01 Jun 2009 03:55:00 +0000</pubDate>
		<dc:creator>OurApache</dc:creator>
				<category><![CDATA[Apache初级应用]]></category>
		<category><![CDATA[log]]></category>
		<category><![CDATA[日志]]></category>

		<guid isPermaLink="false">http://www.ourapache.com/?p=243</guid>
		<description><![CDATA[要有效地管理Web服务器，就有必须了解服务器的状态、性能以及出现的问题。Apache提供了非常全面而灵活的日志记录功能。本文将阐述如何配置文件以及如何理解日志内容。]]></description>
			<content:encoded><![CDATA[<h2>引言</h2>
<p>要有效地管理Web服务器，就有必须了解服务器的状态、性能以及出现的问题。Apache提供了非常全面而灵活的日志记录功能。本文将阐述如何配置文件以及如何理解日志内容。</p>
<p> </p>
<h3>1.使用combined获取更详细的日志</h3>
<p>编辑httpd.conf文件（下面几乎都是更改这个文件），搜索CustomLog<br />
CustomLog logs/access_<a href="http://ourapache.com/archives/tag/log" class="st_tag internal_tag" rel="tag" title="标签 log 下的日志">log</a> combined<br />
用这个格式不会有什么损失，而且还能获得一些额外的信息（referer和user-agent）。</p>
<h3>2.让错误信息更全面</h3>
<p>通过定义loglevel来实现<br />
搜索LogLevel</p>
<p>日志级别如下。（debug产生的信息最多。emerg产生的信息最少）</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top">
<p align="left"><strong>Level</strong></p>
</td>
<td valign="top">
<p align="left"><strong>描述</strong></p>
</td>
<td valign="top">
<p align="left"><strong>例子</strong></p>
</td>
</tr>
<tr>
<td valign="top">
<p align="left">emerg</p>
</td>
<td valign="top">
<p align="left">紧急(系统无法使用)</p>
</td>
<td valign="top">
<p align="left">“Child cannot open lock file. Exiting”</p>
</td>
</tr>
<tr>
<td valign="top">
<p align="left">alert</p>
</td>
<td valign="top">
<p align="left">必须立即采取措施</p>
</td>
<td valign="top">
<p align="left">“getpwuid: couldn’t determine user name from uid”</p>
</td>
</tr>
<tr>
<td valign="top">
<p align="left">crit</p>
</td>
<td valign="top">
<p align="left">致命情况</p>
</td>
<td valign="top">
<p align="left">“socket: Failed to get a socket, exiting child”</p>
</td>
</tr>
<tr>
<td valign="top">
<p align="left">error</p>
</td>
<td valign="top">
<p align="left">错误情况</p>
</td>
<td valign="top">
<p align="left">“Premature end of script headers”</p>
</td>
</tr>
<tr>
<td valign="top">
<p align="left">warn</p>
</td>
<td valign="top">
<p align="left">警告情况</p>
</td>
<td valign="top">
<p align="left">“child process 1234 did not exit, sending another SIGHUP”</p>
</td>
</tr>
<tr>
<td valign="top">
<p align="left">notice</p>
</td>
<td valign="top">
<p align="left">一般重要情况</p>
</td>
<td valign="top">
<p align="left">“httpd: caught SIGBUS, attempting to dump core in …”</p>
</td>
</tr>
<tr>
<td valign="top">
<p align="left">info</p>
</td>
<td valign="top">
<p align="left">普通信息</p>
</td>
<td valign="top">
<p align="left">“Server seems busy, (you may need to increase StartServers, or Min/MaxSpareServers)…”</p>
</td>
</tr>
<tr>
<td valign="top">
<p align="left">debug</p>
</td>
<td valign="top">
<p align="left">调试信息</p>
</td>
<td valign="top">
<p align="left">“Opening config file …”</p>
</td>
</tr>
</tbody>
</table>
<p> </p>
<h3>3.记录以POST方式传送的数据</h3>
<p>使用mod_secutiry,增加如下配置<br />
SecAuditLogType Concurrent<br />
SecAuditLogStorageDir /var/www/audit_log/data/<br />
SecAuditLog /var/www/audit_log/index<br />
SecAuditLogParts ABCFHZ<br />
注：<br />
post方式与get方式<br />
1、采用post方式传输数据时,不需要在URL中显示出来,而get方式要在URL当中进行显示(不安全性).<br />
2、post方式的传输数据量较大,理论上来说是没有限制的,而get方式由于受到UEL长度的限制,只能传递GET方式提交的数据最多只能有1024字节.<br />
3、post顾名思义,就是为了将数据传送到服务器端,Get就是为了从服务器端取得数据.而Get之所以也能传送数据,只是用来设计告诉服务器,你到底需要什么样的数据.post的信息作为http请求的内容，而Get是在Http头部传输的。<br />
我们的form表单的method方法，post,get.它在页面传值的时候的区别也就是上面提到的三点.</p>
<h3>4.记录cookie</h3>
<p>记录从客户端<strong>收到的cookie</strong></p>
<p>CustomLog logs/cookies_in.log “%{UNIQUE_ID}e %{Cookie}i”<br />
CustomLog logs/cookies2_in.log “%{UNIQUE_ID}e %{Cookie2}i”</p>
<p>记录由服务器<strong>发送的cookie</strong></p>
<p>CustomLog logs/cookies_out.log “%{UNIQUE_ID}e %{Set-Cookie}o”<br />
CustomLog logs/cookies2_out.log “%{UNIQUE_ID}e %{Set-Cookie2}o”<br />
注：本方法记录所有的cookie ，如何区分是个问题。我只在实验的时候用，真实生产环境用的不多。<br />
cookie与Set-cookie标头字段是最常用到的。cookie2与set-cookie对应的字段比较新。</p>
<h3>5.忽略来自本站的请求</h3>
<p>追踪盗链的时候比较有用。<br />
定义后缀<br />
SetEnvIfNoCase Referer “^http://www.example.com/” 你的网站 local_referrer=1</p>
<p>CustomLog logs/access_log combined env=!local_referrer</p>
<p>注：SetEnvIfNoCase与SetEnvIf相同，但是前者无视大小写。</p>
<h3>6.按时间生产日志</h3>
<p>有时需要间隔N小时生产一次日志。</p>
<p>CustomLog “| /path/to/rotatelogs /path/to/logs/access_log.%Y-%m-%d 86400″ combined</p>
<p>注：使用了CustomLog和rotatelogs （red hat默认就有）。<br />
使用秒来控制间隔时间。</p>
<h3>7.在每月的第一天更新日志文件</h3>
<p>在每月的第一天结束上个月的日志文件，同时开始新的记录。</p>
<p><code>CustomLog "|/usr/bin/cronolog /www/logs/access%Y%m.log" combined</code></p>
<p>注：需要使用cronolog，十分好用的工具，下载地址请google之。</p>
<h3>8.为虚拟主机建立各自的日志</h3>
<p>首先，需要将虚拟主机的信息放入日志中。</p>
<p>LogFormat “%v %h %l %u %t \”%r\” %&gt;s %b” vhost<br />
CustomLog logs/multiple_vhost_log vhost</p>
<p>这将用日志的普通格式来创建一个日志文件。但会在每条记录前加上正式的虚拟主机名(就是在ServerName指令中定义的那个)。<br />
现在将日志文件分开(每个虚拟主机一个日志文件)</p>
<p>split-logfile &lt; /logs/multiple_vhost_log</p>
<p>注：split-logfile不是自动安装的，而是在配置过程以后，装在”support”目录下的<br />
附表</p>
<h3>9.记录响应请求的ip地址</h3>
<p>当服务器有多个ip时想知道是哪个ip响应了请求。</p>
<p>CustomLog logs/served-by.log “%A”</p>
<h3>10.记录访客来源</h3>
<p>知己知彼，了解访客是从哪个网站过来的。</p>
<p>%{Referer}i</p>
<p>注：默认已经包含在logformat</p>
<h3>11.记录访客使用的浏览器</h3>
<p>%{User-Agent}i</p>
<p>注：默认已经包含在logformat</p>
<h3>12.使用syslog记录apache日志</h3>
<p>第一步：配置syslog<br />
/etc/syslog.conf是syslog的配置文件。<br />
里面的每一行都用一个或者多个空格或者TAB隔开，分成两个段<br />
如：<br />
mail.info /var/log/maillog<br />
意思是把日志对象mail的info级别及以上级别的日志记录到/var/log/maillog中去<br />
在这里，前面一段是 : 日志对象.日志级别。后面一段是:日志的记录位置，这个位置可以是<strong>文件</strong>(如/var/log/maillog)，可以是某个<strong>TTY</strong>（如/dev/tty1）可以是某个登录的<strong>用户的控制台</strong> （如用户名jean）也可以是当前所有的下在登录的用户所在的控制台（用＊号表示所有用户）还可以是一台<strong>远程的主机</strong>（@remote_host_ip）<br />
现在加入这一行</p>
<p>local0.info /var/log/apache.log</p>
<p>然后重新启动syslog。service syslog restart<br />
第二步<br />
在apache配置中加入</p>
<p>CustomLog “|logger -t apache -p local0.info” combined</p>
<h3>补充</h3>
<p>HTTP状态码</p>
<table border="1" cellspacing="0" cellpadding="0" width="100%">
<thead>
<tr>
<td>
<p align="center"><strong>编码</strong></p>
</td>
<td>
<p align="center"><strong>描述</strong></p>
</td>
</tr>
</thead>
<tbody>
<tr>
<td colspan="2">
<p align="left">Informational 1xx</p>
</td>
</tr>
<tr>
<td>
<p align="left">100</p>
</td>
<td>
<p align="left">Continue</p>
</td>
</tr>
<tr>
<td>
<p align="left">101</p>
</td>
<td>
<p align="left">Switching protocols</p>
</td>
</tr>
<tr>
<td colspan="2">
<p align="left">Successful 2xx</p>
</td>
</tr>
<tr>
<td>
<p align="left">200</p>
</td>
<td>
<p align="left">OK</p>
</td>
</tr>
<tr>
<td>
<p align="left">201</p>
</td>
<td>
<p align="left">Created</p>
</td>
</tr>
<tr>
<td>
<p align="left">202</p>
</td>
<td>
<p align="left">Accepted</p>
</td>
</tr>
<tr>
<td>
<p align="left">203</p>
</td>
<td>
<p align="left">Nonauthoritative information</p>
</td>
</tr>
<tr>
<td>
<p align="left">204</p>
</td>
<td>
<p align="left">No content</p>
</td>
</tr>
<tr>
<td>
<p align="left">205</p>
</td>
<td>
<p align="left">Reset content</p>
</td>
</tr>
<tr>
<td>
<p align="left">206</p>
</td>
<td>
<p align="left">Partial content</p>
</td>
</tr>
<tr>
<td colspan="2">
<p align="left">Redirection 3xx</p>
</td>
</tr>
<tr>
<td>
<p align="left">300</p>
</td>
<td>
<p align="left">Multiple choices</p>
</td>
</tr>
<tr>
<td>
<p align="left">301</p>
</td>
<td>
<p align="left">Moved permanently</p>
</td>
</tr>
<tr>
<td>
<p align="left">302</p>
</td>
<td>
<p align="left">Found</p>
</td>
</tr>
<tr>
<td>
<p align="left">303</p>
</td>
<td>
<p align="left">See other</p>
</td>
</tr>
<tr>
<td>
<p align="left">304</p>
</td>
<td>
<p align="left">Not modified</p>
</td>
</tr>
<tr>
<td>
<p align="left">305</p>
</td>
<td>
<p align="left">Use proxy</p>
</td>
</tr>
<tr>
<td>
<p align="left">306</p>
</td>
<td>
<p align="left">(Unused)</p>
</td>
</tr>
<tr>
<td>
<p align="left">307</p>
</td>
<td>
<p align="left">Temporary redirect</p>
</td>
</tr>
<tr>
<td colspan="2">
<p align="left">Client error 4xx</p>
</td>
</tr>
<tr>
<td>
<p align="left">400</p>
</td>
<td>
<p align="left">Bad request</p>
</td>
</tr>
<tr>
<td>
<p align="left">401</p>
</td>
<td>
<p align="left">Unauthorized</p>
</td>
</tr>
<tr>
<td>
<p align="left">402</p>
</td>
<td>
<p align="left">Payment required</p>
</td>
</tr>
<tr>
<td>
<p align="left">403</p>
</td>
<td>
<p align="left">Forbidden</p>
</td>
</tr>
<tr>
<td>
<p align="left">404</p>
</td>
<td>
<p align="left">Not found</p>
</td>
</tr>
<tr>
<td>
<p align="left">405</p>
</td>
<td>
<p align="left">Method not allowed</p>
</td>
</tr>
<tr>
<td>
<p align="left">406</p>
</td>
<td>
<p align="left">Not acceptable</p>
</td>
</tr>
<tr>
<td>
<p align="left">407</p>
</td>
<td>
<p align="left">Proxy authentication required</p>
</td>
</tr>
<tr>
<td>
<p align="left">408</p>
</td>
<td>
<p align="left">Request timeout<a name="I_indexterm3_d1e3983"></a></p>
</td>
</tr>
<tr>
<td>
<p align="left">409</p>
</td>
<td>
<p align="left">Conflict</p>
</td>
</tr>
<tr>
<td>
<p align="left">410</p>
</td>
<td>
<p align="left">Gone</p>
</td>
</tr>
<tr>
<td>
<p align="left">411</p>
</td>
<td>
<p align="left">Length required</p>
</td>
</tr>
<tr>
<td>
<p align="left">412</p>
</td>
<td>
<p align="left">Precondition failed</p>
</td>
</tr>
<tr>
<td>
<p align="left">413</p>
</td>
<td>
<p align="left">Request entity too large</p>
</td>
</tr>
<tr>
<td>
<p align="left">414</p>
</td>
<td>
<p align="left">Request-URI too long</p>
</td>
</tr>
<tr>
<td>
<p align="left">415</p>
</td>
<td>
<p align="left">Unsupported media type</p>
</td>
</tr>
<tr>
<td>
<p align="left">416</p>
</td>
<td>
<p align="left">Requested range not satisfiable</p>
</td>
</tr>
<tr>
<td>
<p align="left">417</p>
</td>
<td>
<p align="left">Expectation failed</p>
</td>
</tr>
<tr>
<td colspan="2">
<p align="left">Server error 5xx</p>
</td>
</tr>
<tr>
<td>
<p align="left">500</p>
</td>
<td>
<p align="left">Internal server error</p>
</td>
</tr>
<tr>
<td>
<p align="left">501</p>
</td>
<td>
<p align="left">Not implemented</p>
</td>
</tr>
<tr>
<td>
<p align="left">502</p>
</td>
<td>
<p align="left">Bad gateway</p>
</td>
</tr>
<tr>
<td>
<p align="left">503</p>
</td>
<td>
<p align="left">Service unavailable</p>
</td>
</tr>
<tr>
<td>
<p align="left">504</p>
</td>
<td>
<p align="left">Gateway timeout</p>
</td>
</tr>
<tr>
<td>
<p align="left">505</p>
</td>
<td>
<p align="left">HTTP version not supported</p>
</td>
</tr>
</tbody>
</table>
<p class="MsoNormal"> </p>
<h3  class="related_post_title">相关文章</h3><ul class="related_post"><li>2009年02月26号 -- <a href="http://ourapache.com/archives/184" title="Apache日志文件（配置和管理）">Apache日志文件（配置和管理）</a></li><li>2009年02月25号 -- <a href="http://ourapache.com/archives/176" title="网站服务器(Apache)的日志与监视">网站服务器(Apache)的日志与监视</a></li><li>2009年02月25号 -- <a href="http://ourapache.com/archives/172" title="查询并禁止apache中异常访问量的用户">查询并禁止apache中异常访问量的用户</a></li><li>2009年03月9号 -- <a href="http://ourapache.com/archives/227" title="通过SNMP协议来监视Apache服务器">通过SNMP协议来监视Apache服务器</a></li><li>2009年03月9号 -- <a href="http://ourapache.com/archives/224" title="监视并记录Apache网站服务器的运行">监视并记录Apache网站服务器的运行</a></li><li>2009年02月11号 -- <a href="http://ourapache.com/archives/130" title="实时跟踪log变化的工具Apachetop">实时跟踪log变化的工具Apachetop</a></li><li>2009年02月10号 -- <a href="http://ourapache.com/archives/117" title="让Apache按日期保存日志数据">让Apache按日期保存日志数据</a></li></ul>
	标签：<a href="http://ourapache.com/archives/category/primary" title="Apache初级应用" rel="tag">Apache初级应用</a>, <a href="http://ourapache.com/archives/tag/log" title="log" rel="tag">log</a>, <a href="http://ourapache.com/archives/tag/%e6%97%a5%e5%bf%97" title="日志" rel="tag">日志</a><br />
]]></content:encoded>
			<wfw:commentRss>http://ourapache.com/archives/243/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apache日志文件（配置和管理）</title>
		<link>http://ourapache.com/archives/184</link>
		<comments>http://ourapache.com/archives/184#comments</comments>
		<pubDate>Thu, 26 Feb 2009 04:07:19 +0000</pubDate>
		<dc:creator>OurApache</dc:creator>
				<category><![CDATA[Apache基础知识]]></category>
		<category><![CDATA[log]]></category>
		<category><![CDATA[日志]]></category>
		<category><![CDATA[配置]]></category>

		<guid isPermaLink="false">http://www.ourapache.com/?p=184</guid>
		<description><![CDATA[Apache日志文件（配置和管理）]]></description>
			<content:encoded><![CDATA[<p><strong>1.安全警告：</strong></p>
<p>任何人只要对Apache存放日志文件的目录具有写权限，也就当然地可以获得启动Apache的用户(通常是root)的权限，绝对不要随意给予任何人存放日志文件目录的写权限。</p>
<p><strong>2.错误日志(Error <a href="http://ourapache.com/archives/tag/log" class="st_tag internal_tag" rel="tag" title="标签 log 下的日志">Log</a>)</strong></p>
<p>Apache httpd将在这个文件中存放诊断信息和处理请求中出现的错误，由于这里经常包含了出错细节以及如何解决，如果服务器启动或运行中有问题，首先就应该查看这个错误日志</p>
<p>错误日志通常被写入一个文件(unix系统上一般是error_log ，Windows和OS/2上一般是error.log)。在unix系统中，错误日志还可能被重定向到syslog或通过管道操作传递给一个程序。</p>
<p><strong>3.访问日志(Access Log)</strong></p>
<p>记录服务器所处理的所有请求，其文件名和位置取决于CustomLog指令，LogFormat指令可以简化日志的内容。</p>
<p>不同版本的Apache httpd使用了不同的模块和指令来控制对访问的记录，包括mod_log_referer, mod_log_agent和TransferLog指令。现在，CustomLog指令包含了旧版本中相关指令的所有功能。</p>
<p><strong>通用日志格式</strong>(Common Log Format)，下面是一个典型的记录格式：<br />
LogFormat “%h %l %u %t \\”%r\\” %&gt;s %b” common<br />
CustomLog logs/access_log common<br />
它定义了一种特定的记录格式字符串，并给它起了个别名叫common ，其中的”%”指示服务器用某种信息替换，其他字符则不作替换。引号(”)必须加反斜杠转义，以避免被解释为字符串的结束。格式字符串还可以包含特殊的控制符，如换行符”\\n” 、制表符”\\t”。<br />
CustomLog指令建立一个使用指定别名的新日志文件，除非其文件名是以斜杠开头的绝对路径，否则其路径就是相对于ServerRoot的相对路径。</p>
<p><strong>组合日志格式</strong>(Combined Log Format)，形式如下：<br />
LogFormat “%h %l %u %t \\”%r\\” %&gt;s %b \\”%{Referer}i\\” \\”%{User-agent}i\\”” combined<br />
CustomLog log/access_log combined<br />
这种格式与通用日志格式类似，但是多了两个 %{header}i 项，其中的header可以是任何请求头。</p>
<p><strong>多文件访问日志</strong>：<br />
可以简单地在配置文件中用多个CustomLog指令来建立多文件访问日志。如下例，既记录基本的CLF信息，又记录提交网页和浏览器的信息，最后两行CustomLog示范了如何模拟ReferLog和AgentLog指令的效果。<br />
LogFormat “%h %l %u %t \\”%r\\” %&gt;s %b” common<br />
CustomLog logs/access_log common<br />
CustomLog logs/referer_log “%{Referer}i -&gt; %U”<br />
CustomLog logs/agent_log “%{User-agent}i”<br />
此例也说明了，记录格式可以直接由CustomLog指定，而并不一定要用LogFormat起一个别名。</p>
<p><strong>条件日志</strong>：<br />
许多时候，根据与请求特征相关的环境变量来有选择地记录某些客户端请求会带来便利。首先，需要使用SetEnvIf指令来设置特定的环境变量以标识符合某种特定条件的请求，然后用CustomLog指令的 env= 子句，根据这些环境变量来决定记录或排除特定的请求。例如：<br />
# 不记录本机发出的请求<br />
SetEnvIf Remote_Addr “127\\.0\\.0\\.1″ dontlog<br />
# 不记录对robots.txt文件的请求<br />
SetEnvIf Request_URI “^/robots\\.txt$” dontlog<br />
# 记录其他请求<br />
CustomLog logs/access_log common env=!dontlog</p>
<p><strong>4.日志滚动</strong></p>
<p>由于Apache会保持日志文件的打开，并持续写入信息，因此服务器运行期间不能执行滚动操作。移动或者删除日志文件以后，必须重新启动服务器才能让它打开新的日志文件。</p>
<p>用优雅的(graceful)方法重新启动，可以使服务器启用新的日志文件，而不丢失原来尚未写入的信息。为此，有必要等待一段时间，让服务器完成正在处理的请求，并将记录写入到原来的日志文件。以下是一个典型的日志滚动和为节省存储空间而压缩旧日志的例子：<br />
mv access_log access_log.old<br />
mv error_log error_log.old<br />
apachectl graceful<br />
sleep 600<br />
gzip access_log.old error_log.old</p>
<p><strong>5.管道日志</strong></p>
<p>Apache httpd可以通过管道将访问记录和出错信息传递给另一个进程，而不是写入一个文件，由于无须对主服务器进行编程，这个功能显著地增强了日志的灵活性。只要用管道操作符”|”后面跟一个可执行文件名，就可以使这个程序从标准输入设备获得事件记录。Apache在启动时，会同时启动这个管道日志进程，并且在运行过程中，如果这个进程崩溃了，会重新启动这个进程(所以我们称这个技术为”可靠管道日志”)。</p>
<p>管道日志进程由其父进程Apache httpd产生，并继承其权限，这意味着管道进程通常是作为root运行的，所以保持这个程序简单而安全极为重要。（yes）</p>
<p>管道日志的一种重要用途是，允许日志滚动而无须重新启动服务器。为此，服务器提供了一个简单的程序rotatelogs 。每24小时滚动一次日志的例子如下：<br />
CustomLog “|/usr/local/apache/bin/rotatelogs /var/log/access_log 86400″ common<br />
注意：引号用于界定整个管道命令行。虽然这是针对访问日志的，但是其用法对于其他日志也一样。</p>
<p>在其他站点，有一个类似但更灵活的日志滚动程序叫cronolog 。</p>
<p>如果有较简单的离线处理日志的方案，就不应该使用条件日志和管道日志，即使它们非常强大。</p>
<p><strong>6.虚拟主机日志</strong></p>
<p>如果服务器配有若干虚拟主机，那么还有几个控制日志文件的功能。首先，可以把日志指令放在&lt;VirtualHost&gt;段之外，让它们与主服务器使用同一个访问日志和错误日志来记录所有的请求和错误，但是这样就不能方便的获得每个虚拟主机的信息了。</p>
<p>如果把CustomLog或ErrorLog指令放在&lt;VirtualHost&gt;段内，所有对这个虚拟主机的请求和错误信息会被记录在其私有的日志文件中，那些没有在&lt;VirtualHost&gt;段内使用日志指令的虚拟主机将仍然和主服务器使用同一个日志。这种方法对虚拟主机较少的服务器很有用，但虚拟主机非常多时，就会带来管理上的困难，还经常会产生文件描述符短缺的问题。</p>
<p><strong>7.其他日志文件</strong><br />
略。。。</p>
<h3  class="related_post_title">相关文章</h3><ul class="related_post"><li>2009年06月1号 -- <a href="http://ourapache.com/archives/243" title="玩转apache之日志">玩转apache之日志</a></li><li>2009年02月25号 -- <a href="http://ourapache.com/archives/176" title="网站服务器(Apache)的日志与监视">网站服务器(Apache)的日志与监视</a></li><li>2009年02月25号 -- <a href="http://ourapache.com/archives/172" title="查询并禁止apache中异常访问量的用户">查询并禁止apache中异常访问量的用户</a></li><li>2010年03月9号 -- <a href="http://ourapache.com/archives/318" title="Apache2中俩种设置PHP的异同">Apache2中俩种设置PHP的异同</a></li><li>2009年03月9号 -- <a href="http://ourapache.com/archives/227" title="通过SNMP协议来监视Apache服务器">通过SNMP协议来监视Apache服务器</a></li><li>2009年03月9号 -- <a href="http://ourapache.com/archives/224" title="监视并记录Apache网站服务器的运行">监视并记录Apache网站服务器的运行</a></li><li>2009年02月11号 -- <a href="http://ourapache.com/archives/130" title="实时跟踪log变化的工具Apachetop">实时跟踪log变化的工具Apachetop</a></li><li>2009年02月10号 -- <a href="http://ourapache.com/archives/123" title="Apache高级配置中文详解">Apache高级配置中文详解</a></li><li>2009年02月10号 -- <a href="http://ourapache.com/archives/117" title="让Apache按日期保存日志数据">让Apache按日期保存日志数据</a></li><li>2009年01月22号 -- <a href="http://ourapache.com/archives/66" title="Apache配置文件(httpd.conf)中文说明">Apache配置文件(httpd.conf)中文说明</a></li></ul>
	标签：<a href="http://ourapache.com/archives/category/basic" title="Apache基础知识" rel="tag">Apache基础知识</a>, <a href="http://ourapache.com/archives/tag/log" title="log" rel="tag">log</a>, <a href="http://ourapache.com/archives/tag/%e6%97%a5%e5%bf%97" title="日志" rel="tag">日志</a>, <a href="http://ourapache.com/archives/tag/%e9%85%8d%e7%bd%ae" title="配置" rel="tag">配置</a><br />
]]></content:encoded>
			<wfw:commentRss>http://ourapache.com/archives/184/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>网站服务器(Apache)的日志与监视</title>
		<link>http://ourapache.com/archives/176</link>
		<comments>http://ourapache.com/archives/176#comments</comments>
		<pubDate>Wed, 25 Feb 2009 10:20:53 +0000</pubDate>
		<dc:creator>OurApache</dc:creator>
				<category><![CDATA[Apache基础知识]]></category>
		<category><![CDATA[log]]></category>
		<category><![CDATA[日志]]></category>

		<guid isPermaLink="false">http://www.ourapache.com/?p=176</guid>
		<description><![CDATA[Apache提供很多检测和日志工具来追踪服务器的正确运行。默认的Apache配置提供两个日志文件，放置在安装目录下的日志目录里面。access_log这个文件（在windows下对应access.log文件）包含了服务器已经处理过的请求的信息，比如说请求的URL，客户端的IP地址，请求是否被成功完成等。error_log 这个文件（在windows下对应error.log文件）包含了与错误情况相关的信息，以及服务器生命周期中不同的大事件。]]></description>
			<content:encoded><![CDATA[<p><strong>默认的Apache日志文件</strong></p>
<p>Apache提供很多检测和日志工具来追踪服务器的正确运行。默认的Apache配置提供两个日志文件，放置在安装目录下的日志目录里面。access_log这个文件（在windows下对应access.log文件）包含了服务器已经处理过的请求的信息，比如说请求的URL，客户端的IP地址，请求是否被成功完成等。error_<a href="http://ourapache.com/archives/tag/log" class="st_tag internal_tag" rel="tag" title="标签 log 下的日志">log</a> 这个文件（在windows下对应error.log文件）包含了与错误情况相关的信息，以及服务器生命周期中不同的大事件。</p>
<p><strong>创建日志格式</strong></p>
<blockquote><p>LogFormat “%h %l %u %t \”%r\” %&gt;s %b” common<br />
LogFormat “%h %l %u %t \”%r\” %&gt;s %b”<br />
\”%{Referer}i\” \”%{User-agent}i\”" combined</p></blockquote>
<p>LogFormat指令允许你告诉Apache你想要记录请求的哪些方面。而你仍需附加的指令来告诉Apache在哪里记录那些信息，这在下一章中将会介绍。下面的例子显示了两种最受欢迎的格式的配置：普通日志格式和整合日志格式。当Apache收到一个请求，他将会用相应的请求属性来替代以%为前缀的每一个域。如果您正在使用普通日志格式，您的日志文件里的每一项输入看起来都将是这样的：</p>
<blockquote><p>192.168.200.4 &#8211; someuser [12/Jun/2005:08:33:34<br />
+0500] “GET /example.png HTTP/1.0&#8243; 200 1234</p></blockquote>
<p>如果您正在使用整合日志格式，您的日志文件里的每一项输入看起来则都将是这样的：</p>
<blockquote><p>192.168.200.4 &#8211; someuser [12/Jun/2005:08:33:34<br />
+0500] “GET /example.png HTTP/1.0&#8243; 200 1234<br />
<a href="http://www.example.com/index.html" target="_blank"><span style="color: #0000ff;">http://www.example.com/index.html</span></a> “Mozilla/5.0<br />
(Windows; U; Windows NT 5.1; en-US; rv:1.7.7)”</p></blockquote>
<p>尽管有附件提供日志格式的详尽索引，下表描述了一些最为重要的域：</p>
<blockquote><p># %h: 客户端（例如，浏览器）向服务器发出连接请求时自己的当时的IP地址或域名(需开启HostNameLookups)。<br />
# %u: 使用HTTP方式认证用户时，记录下的用户的编号。<br />
# %t: 服务器接受到连接请求的时间。<br />
# %r: 客户端发出的原始连接请求中的文本信息，包含所使用的HTTP方法。<br />
# %&gt;s: 服务器应答浏览器后的返回状态代码，200表示请求成功。.<br />
# %b: 服务器应答浏览器发出的单个请求的回传对象的内容大小（字节为单位），不统计数据包头部字节。<br />
整合日志格式在普通日志格式的基础上扩展出了两个附加的域。定义为：<br />
# %{Referer}i: 连接请求数据包包头，包含指向当前页面的文档关联信息。<br />
# %{User-agent}i: 用户代理连接请求数据包包头，包含客户浏览器的信息。</p></blockquote>
<p><strong>创建一个自定义日志文件</strong></p>
<blockquote><p>CustomLog logs/access_log common<br />
TransferLog logs/sample.log</p></blockquote>
<p>您可能会想创建Apache自带以外的新的日志文件。下面的例子将运用CustomLog来创建一个新的日志文件，并保存由一个之前定义好的日志格式，即前一章提到的common，所定义的信息。您还可以用格式本身的定义来替换昵称。一个附加的，更为简单的指令是Transferlog，它只接受最后一个LogFormat指令提供的定义。</p>
<h3  class="related_post_title">相关文章</h3><ul class="related_post"><li>2009年06月1号 -- <a href="http://ourapache.com/archives/243" title="玩转apache之日志">玩转apache之日志</a></li><li>2009年02月26号 -- <a href="http://ourapache.com/archives/184" title="Apache日志文件（配置和管理）">Apache日志文件（配置和管理）</a></li><li>2009年02月25号 -- <a href="http://ourapache.com/archives/172" title="查询并禁止apache中异常访问量的用户">查询并禁止apache中异常访问量的用户</a></li><li>2009年03月9号 -- <a href="http://ourapache.com/archives/227" title="通过SNMP协议来监视Apache服务器">通过SNMP协议来监视Apache服务器</a></li><li>2009年03月9号 -- <a href="http://ourapache.com/archives/224" title="监视并记录Apache网站服务器的运行">监视并记录Apache网站服务器的运行</a></li><li>2009年02月11号 -- <a href="http://ourapache.com/archives/130" title="实时跟踪log变化的工具Apachetop">实时跟踪log变化的工具Apachetop</a></li><li>2009年02月10号 -- <a href="http://ourapache.com/archives/117" title="让Apache按日期保存日志数据">让Apache按日期保存日志数据</a></li></ul>
	标签：<a href="http://ourapache.com/archives/category/basic" title="Apache基础知识" rel="tag">Apache基础知识</a>, <a href="http://ourapache.com/archives/tag/log" title="log" rel="tag">log</a>, <a href="http://ourapache.com/archives/tag/%e6%97%a5%e5%bf%97" title="日志" rel="tag">日志</a><br />
]]></content:encoded>
			<wfw:commentRss>http://ourapache.com/archives/176/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>查询并禁止apache中异常访问量的用户</title>
		<link>http://ourapache.com/archives/172</link>
		<comments>http://ourapache.com/archives/172#comments</comments>
		<pubDate>Wed, 25 Feb 2009 10:17:50 +0000</pubDate>
		<dc:creator>OurApache</dc:creator>
				<category><![CDATA[Apache初级应用]]></category>
		<category><![CDATA[log]]></category>
		<category><![CDATA[日志]]></category>

		<guid isPermaLink="false">http://www.ourapache.com/?p=172</guid>
		<description><![CDATA[Apache中的异常访问，通常指的是频繁、大量访问的用户，通过apache的log，结合linux下的几个命令，可以分析这些用户，并通过apache的配置文件来禁止他们访问。]]></description>
			<content:encoded><![CDATA[<p>Apache中的异常访问，通常指的是频繁、大量访问的用户，通过apache的log，结合linux下的几个命令，可以分析这些用户，并通过apache的配置文件来禁止他们访问。</p>
<p>首先，更改apache的log方式，不记录一些图像、css等文件，这样在log中每一行基本上都能对应一次访问，如果不去除图像等文件的记录，正常用户访问一个页面，同时也会下载页面上的图像、css等文件，会产生多条log记录，影响计数的结果。在apache的conf文件中增加如下配置：</p>
<p>SetEnvIfNoCase Request_URI \.css$ useless-file<br />
SetEnvIfNoCase Request_URI \.gif$ useless-file<br />
SetEnvIfNoCase Request_URI \.ico$ useless-file<br />
SetEnvIfNoCase Request_URI \.jpg$ useless-file<br />
SetEnvIfNoCase Request_URI \.js$ useless-file<br />
CustomLog logs/fwolf.com/access.<a href="http://ourapache.com/archives/tag/log" class="st_tag internal_tag" rel="tag" title="标签 log 下的日志">log</a> combined env=!useless-file</p>
<p>这样就可以了，关于SetEnvIf的其他用法，可以参见Apache文档中SetEnvIf和Environment Variables in Apache部分。</p>
<p>接下来，经过一段时间的运行，我们就可以分析log文件中访问量最大的用户了，只需要一条命令：</p>
<p>cat access.log |awk &#8216;{print $1}&#8217;| sort | uniq -c |sort -n</p>
<p>一点点的来看：</p>
<p>cat就不用说了；<br />
awk的作用，就是把第一列，也就是客户端ip地址分拣出来；<br />
第一个sort，是把分拣出来的ip地址排序，这样相同的ip地址会排在一起<br />
uniq是一个去除重复值的工具，但是带上-c参数，就可以统计出每个值出现了多少次<br />
最后的sort，把uniq产生的结果进行排序，按照-n这个参数的默认设置，最大的排在最下面。<br />
所以，我们得到的结果应该是这样的：</p>
<p>&#8230;&#8230;<br />
2040 219.148.106.198<br />
2047 218.12.78.14<br />
2149 218.12.26.233<br />
2205 121.28.4.34</p>
<p>第一列就是访问次数，第二列是ip地址，再回去对照log文件中的详细内容，如果发现哪个访问量大户是某某机器人的话，就可以禁止掉了，还是修改apache的conf文件：</p>
<p>&lt;Directory /&gt;<br />
    Order Deny,Allow<br />
    Deny from 219.143.69.2<br />
    Deny from 218.12.26.233<br />
    Deny from 61.135.162.51<br />
    Allow from all<br />
&lt;/Directory&gt;</p>
<p>如此反复监测、设置，直到没有人捣乱为止。</p>
<p>同理，如果想查看反复刷新查看某一页面的用户，可以用如下命令：</p>
<p>grep “GET /url/to/some/file” access.log |awk &#8216;{print $1}&#8217; |sort |uniq -c |sort -n</p>
<h3  class="related_post_title">相关文章</h3><ul class="related_post"><li>2009年06月1号 -- <a href="http://ourapache.com/archives/243" title="玩转apache之日志">玩转apache之日志</a></li><li>2009年02月26号 -- <a href="http://ourapache.com/archives/184" title="Apache日志文件（配置和管理）">Apache日志文件（配置和管理）</a></li><li>2009年02月25号 -- <a href="http://ourapache.com/archives/176" title="网站服务器(Apache)的日志与监视">网站服务器(Apache)的日志与监视</a></li><li>2009年03月9号 -- <a href="http://ourapache.com/archives/227" title="通过SNMP协议来监视Apache服务器">通过SNMP协议来监视Apache服务器</a></li><li>2009年03月9号 -- <a href="http://ourapache.com/archives/224" title="监视并记录Apache网站服务器的运行">监视并记录Apache网站服务器的运行</a></li><li>2009年02月11号 -- <a href="http://ourapache.com/archives/130" title="实时跟踪log变化的工具Apachetop">实时跟踪log变化的工具Apachetop</a></li><li>2009年02月10号 -- <a href="http://ourapache.com/archives/117" title="让Apache按日期保存日志数据">让Apache按日期保存日志数据</a></li></ul>
	标签：<a href="http://ourapache.com/archives/category/primary" title="Apache初级应用" rel="tag">Apache初级应用</a>, <a href="http://ourapache.com/archives/tag/log" title="log" rel="tag">log</a>, <a href="http://ourapache.com/archives/tag/%e6%97%a5%e5%bf%97" title="日志" rel="tag">日志</a><br />
]]></content:encoded>
			<wfw:commentRss>http://ourapache.com/archives/172/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>实时跟踪log变化的工具Apachetop</title>
		<link>http://ourapache.com/archives/130</link>
		<comments>http://ourapache.com/archives/130#comments</comments>
		<pubDate>Wed, 11 Feb 2009 09:56:21 +0000</pubDate>
		<dc:creator>OurApache</dc:creator>
				<category><![CDATA[Apache初级应用]]></category>
		<category><![CDATA[apachetop]]></category>
		<category><![CDATA[log]]></category>

		<guid isPermaLink="false">http://www.ourapache.com/?p=130</guid>
		<description><![CDATA[作为一个网站管理员，我们经常会有需要知道当前什么人正在访问我们的网站，谁正在频繁的抓取我们网站的内容，什么搜索引擎正在抓取我们网站？面对这些问题，我们虽然可以去查看log日志文件，但是却不能让我们实时统计，不能给我们直观的统计数据。现在好了，有了apachetop这个工具就可以实时的跟踪log的变化，对网站管理帮助很大。Apachetop是一个apache的log实时监测程序，能查看访问者正在查看哪些文件，和访问者IP等信息。]]></description>
			<content:encoded><![CDATA[<p>　　作为一个网站管理员，我们经常会有需要知道当前什么人正在访问我们的网站，谁正在频繁的抓取我们网站的内容，什么搜索引擎正在抓取我们网站？面对这些问题，我们虽然可以去查看log日志文件，但是却不能让我们实时统计，不能给我们直观的统计数据。现在好了，有了apachetop这个工具就可以实时的跟踪log的变化，对网站管理帮助很大。Apachetop是一个apache的log实时监测程序，能查看访问者正在查看哪些文件，和访问者IP等信息。</p>
<p>　　首先，看看怎么安装：</p>
<div id="zoomtext" class="textbox-content">
<div class="quote">
<blockquote>
<div class="quote-content">cd /usr/ports/sysutils/<a href="http://ourapache.com/archives/tag/apachetop" class="st_tag internal_tag" rel="tag" title="标签 apachetop 下的日志">apachetop</a><br />
#如果你需要增加正则表达式等功能，则先执行配置命令，不需要则跳过<br />
make config<br />
make<br />
make install</div>
</blockquote>
</div>
<p>      安装成功之后，将在/usr/local/bin，加入apachetop命名文件，如果不能直接执行，请到这里来找。</p>
<p>　　一般使用方法：</p>
<div class="quote">
<blockquote>
<div class="quote-content"># apachetop -f /var/<a href="http://ourapache.com/archives/tag/log" class="st_tag internal_tag" rel="tag" title="标签 log 下的日志">log</a>/httpd.access</div>
</blockquote>
</div>
<p>    下面是用法说明：</p>
<div class="quote">
<blockquote>
<div class="quote-content">ApacheTop v0.12.6 &#8211; Usage:<br />
File options:<br />
 -f logfile  open logfile (assumed common/combined) [/var/log/httpd-access.log]<br />
             (repeat option for more than one source)</p>
<p>URL/host/referrer munging options:<br />
 -q          保持请求字符串[no]<br />
 -l           所有的url小写[no]<br />
 -s num  保持url路径段数量 [all]<br />
 -p          在referrer前面保留协议 [no]<br />
 -r          保留每一个的主机/ip [no]</p>
<p>Stats options:<br />
 必须提供两个参数 default: [-T 30]<br />
缺省设置为保持记录状态30秒，30秒后数据刷新了。为了提供更多的信息给我们分析，我们可以调节下面的参数。<br />
 -H hits     保持状态只到多少点击数<br />
 -T secs     保持状态只到多少秒</p>
<p> -d secs     刷新延迟时间[5]</p>
<p> -h          这个帮助。</p></div>
</blockquote>
</div>
<p>    当执行之后，还有命令可以切换显示状态：</p>
<div class="quote">
<blockquote>
<div class="quote-content">ApacheTop version 0.12.6, Copyright (c) 2003-2004, Chris Elsworth</p>
<p>ONE-TOUCH COMMANDS<br />
d          : 切换urls/referrers/hosts显示模式开关<br />
n          : 切换hits &amp; bytes或返回代码开关<br />
h or ?     : 帮助信息<br />
p          : (un)暂停显示 (冻结更新)<br />
q          : 退出 ApacheTop<br />
up/down    : 移动星标 up/down<br />
right/left : 进入/退出逐条显示模式<br />
子菜单:<br />
s:  排序: [the appropriate menu will appear for your display]<br />
       r) requests  R) reqs/sec  b) bytes  B) bytes/sec<br />
       2) 2xx   3) 3xx   4) 4xx   5) 5xx</p>
<p>t:  固定显示 ON/OFF:<br />
       u) urls  r) referrers  h) hosts</p>
<p>f:  使用过滤器:<br />
       a) add/edit menu c) clear all  s) show active (not done yet)<br />
       a:  ADD FILTER SUBMENU<br />
               u) to urls  r) to referrers  h) to hosts</p></div>
</blockquote>
</div>
</div>
<h3  class="related_post_title">相关文章</h3><ul class="related_post"><li>2009年06月1号 -- <a href="http://ourapache.com/archives/243" title="玩转apache之日志">玩转apache之日志</a></li><li>2009年02月26号 -- <a href="http://ourapache.com/archives/184" title="Apache日志文件（配置和管理）">Apache日志文件（配置和管理）</a></li><li>2009年02月25号 -- <a href="http://ourapache.com/archives/176" title="网站服务器(Apache)的日志与监视">网站服务器(Apache)的日志与监视</a></li><li>2009年02月25号 -- <a href="http://ourapache.com/archives/172" title="查询并禁止apache中异常访问量的用户">查询并禁止apache中异常访问量的用户</a></li></ul>
	标签：<a href="http://ourapache.com/archives/tag/apachetop" title="apachetop" rel="tag">apachetop</a>, <a href="http://ourapache.com/archives/category/primary" title="Apache初级应用" rel="tag">Apache初级应用</a>, <a href="http://ourapache.com/archives/tag/log" title="log" rel="tag">log</a><br />
]]></content:encoded>
			<wfw:commentRss>http://ourapache.com/archives/130/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

