⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 logs.html

📁 这个是我在web培训时老师提供的手册
💻 HTML
📖 第 1 页 / 共 2 页
字号:
      <div class="example"><p><code>
        127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET
        /apache_pb.gif HTTP/1.0" 200 2326
        "http://www.example.com/start.html" "Mozilla/4.08 [en]
        (Win98; I ;Nav)"
      </code></p></div>

      <p>其中,多出来的项是:</p>

      <dl>
        <dt><code>"http://www.example.com/start.html"</code> (<code>\"%{Referer}i\"</code>)</dt>

        <dd>"Referer"请求头。此项指明了该请求是被从哪个网页提交过来的,这个网页应该包含有<code>/apache_pb.gif</code>或者其连接。</dd>

        <dt><code>"Mozilla/4.08 [en] (Win98; I ;Nav)"</code> (<code>\"%{User-agent}i\"</code>)</dt>

        <dd>"User-Agent"请求头。此项是客户端提供的浏览器识别信息。</dd>
      </dl>
    

    <h3><a name="multiple" id="multiple">多文件访问日志</a></h3>
      

      <p>可以简单地在配置文件中用多个<code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code>指令来建立多文件访问日志。如下例,既记录基本的CLF信息,又记录提交网页和浏览器的信息,最后两行<code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code>示范了如何模拟<code>ReferLog</code>和<code>AgentLog</code>指令的效果。</p>

      <div class="example"><p><code>
        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"
      </code></p></div>

      <p>此例也说明了,记录格式可以直接由<code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code>指定,而并不一定要用<code class="directive"><a href="./mod/mod_log_config.html#logformat">LogFormat</a></code>起一个别名。</p>
    

    <h3><a name="conditional" id="conditional">条件日志</a></h3>

      <p>许多时候,根据与请求特征相关的<a href="env.html">环境变量</a>来有选择地记录某些客户端请求会带来便利。首先,需要使用<code class="directive"><a href="./mod/mod_setenvif.html#setenvif">SetEnvIf</a></code>指令来设置特定的<a href="env.html">环境变量</a>以标识符合某种特定条件的请求,然后用<code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code>指令的 <code>env=</code> 子句,根据这些<a href="env.html">环境变量</a>来决定记录或排除特定的请求。例如:</p>

      <div class="example"><p><code>
        # 不记录本机发出的请求<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
      </code></p></div>

      <p>再如,将使用英语的请求记录到一个日志,而记录非英语的请求到另一个日志:</p>

      <div class="example"><p><code>
        SetEnvIf Accept-Language "en" english<br />
        CustomLog logs/english_log common env=english<br />
        CustomLog logs/non_english_log common env=!english
      </code></p></div>

      <p>虽然上述已经展示了条件日志记录的强大和灵活,但这不是控制日志内容的唯一手段,还可以用日志后继处理程序来剔除你不关心的内容,从而使日志更加有用。</p>
    
  </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
<div class="section">
<h2><a name="rotation" id="rotation">日志滚动</a></h2>
    

    <p>即使一个并不繁忙的服务器,其日志文件的信息量也会很大,一般每10000个请求,访问日志就会增加1MB或更多。这就有必要定期滚动日志文件。由于Apache会保持日志文件的打开,并持续写入信息,因此服务器运行期间不能执行滚动操作。移动或者删除日志文件以后,必须<a href="stopping.html">重新启动</a>服务器才能让它打开新的日志文件。</p>

    <p>用<em>优雅的(graceful)</em>方法重新启动,可以使服务器启用新的日志文件,而不丢失原来尚未写入的信息。为此,有必要等待一段时间,让服务器完成正在处理的请求,并将记录写入到原来的日志文件。以下是一个典型的日志滚动和为节省存储空间而压缩旧日志的例子:</p>

    <div class="example"><p><code>
      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
    </code></p></div>

    <p>另一种执行滚动的方法是使用下一节阐述的<a href="#piped">管道日志</a>。</p>
  </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
<div class="section">
<h2><a name="piped" id="piped">管道日志</a></h2>
    

    <p>Apache httpd可以通过管道将访问记录和出错信息传递给另一个进程,而不是写入一个文件,由于无须对主服务器进行编程,这个功能显著地增强了日志的灵活性。只要用管道操作符"<code>|</code>"后面跟一个可执行文件名,就可以使这个程序从标准输入设备获得事件记录。Apache在启动时,会同时启动这个管道日志进程,并且在运行过程中,如果这个进程崩溃了,会重新启动这个进程(所以我们称这个技术为"可靠管道日志")。</p>

    <p>管道日志进程由其父进程Apache httpd产生,并继承其权限,这意味着管道进程通常是作为root运行的,所以保持这个程序简单而安全极为重要。</p>

    <p>管道日志的一种重要用途是,允许日志滚动而无须重新启动服务器。为此,服务器提供了一个简单的程序<code class="program"><a href="./programs/rotatelogs.html">rotatelogs</a></code> 。每24小时滚动一次日志的例子如下:</p>

    <div class="example"><p><code>
      CustomLog "|/usr/local/apache/bin/rotatelogs /var/log/access_log 86400" common
    </code></p></div>

    <p>注意:引号用于界定整个管道命令行。虽然这是针对访问日志的,但是其用法对于其他日志也一样。</p>

    <p>在其他站点,有一个类似但更灵活的日志滚动程序叫<a href="http://www.cronolog.org/">cronolog</a> 。</p>

    <p>如果有较简单的离线处理日志的方案,就不应该使用条件日志和管道日志,即使它们非常强大。</p>
  </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
<div class="section">
<h2><a name="virtualhost" id="virtualhost">虚拟主机</a></h2>
    

    <p>如果服务器配有若干<a href="vhosts/index.html">虚拟主机</a>,那么还有几个控制日志文件的功能。首先,可以把日志指令放在<code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>段之外,让它们与主服务器使用同一个访问日志和错误日志来记录所有的请求和错误,但是这样就不能方便的获得每个虚拟主机的信息了。</p>

    <p>如果把<code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code>或<code class="directive"><a href="./mod/core.html#errorlog">ErrorLog</a></code>指令放在<code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>段内,所有对这个虚拟主机的请求和错误信息会被记录在其私有的日志文件中,那些没有在<code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>段内使用日志指令的虚拟主机将仍然和主服务器使用同一个日志。这种方法对虚拟主机较少的服务器很有用,但虚拟主机非常多时,就会带来管理上的困难,还经常会产生<a href="vhosts/fd-limits.html">文件描述符短缺</a>的问题。</p>

    <p>对于访问日志,有一个很好的折衷方案,在同一个访问日志文件中记录对所有主机的访问,而每条记录都注明虚拟主机的信息,日后再把记录拆开存入不同的文件。例如:</p>

    <div class="example"><p><code>
      LogFormat "%v %l %u %t \"%r\" %&gt;s %b" comonvhost<br />
      CustomLog logs/access_log comonvhost
    </code></p></div>

    <p><code>%v</code> 用来附加虚拟主机的信息。有个<a href="programs/other.html">split-logfile</a>程序可以根据不同的虚拟主机信息对日志进行拆分,并将结果存入不同的文件。</p>
  </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
<div class="section">
<h2><a name="other" id="other">其他日志文件</a></h2>
    

    <table border="1" cellpadding="0" cellspacing="0" bordercolor="#AAAAAA" class="related">
<tr><th>相关模块</th><th>相关指令</th></tr>
<tr><td><ul><li><code class="module"><a href="./mod/mod_logio.html">mod_logio</a></code></li><li><code class="module"><a href="./mod/mod_log_forensic.html">mod_log_forensic</a></code></li><li><code class="module"><a href="./mod/mod_cgi.html">mod_cgi</a></code></li><li><code class="module"><a href="./mod/mod_rewrite.html">mod_rewrite</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/mod_log_config.html#logformat">LogFormat</a></code></li><li><code class="directive"><a href="./mod/mod_log_forensic.html#forensiclog">ForensicLog</a></code></li><li><code class="directive"><a href="./mod/mpm_common.html#pidfile">PidFile</a></code></li><li><code class="directive"><a href="./mod/mod_rewrite.html#rewritelog">RewriteLog</a></code></li><li><code class="directive"><a href="./mod/mod_rewrite.html#rewriteloglevel">RewriteLogLevel</a></code></li><li><code class="directive"><a href="./mod/mod_cgi.html#scriptlog">ScriptLog</a></code></li><li><code class="directive"><a href="./mod/mod_cgi.html#scriptlogbuffer">ScriptLogBuffer</a></code></li><li><code class="directive"><a href="./mod/mod_cgi.html#scriptloglength">ScriptLogLength</a></code></li></ul></td></tr>
</table>

    <h3>记录接收和发送的实际字节数</h3>
      

      <p><code class="module"><a href="./mod/mod_logio.html">mod_logio</a></code>增加了两个额外的<code class="directive"><a href="./mod/mod_log_config.html#logformat">LogFormat</a></code>字段(%I 和 %O)用于记录接收和发送的实际字节数。</p>
    

    <h3>对比记录(Forensic Logging)</h3>
      

      <p><code class="module"><a href="./mod/mod_log_forensic.html">mod_log_forensic</a></code>提供了对客户端请求的<em>对比</em>记录,也就是在请求被处理之前和处理完成之后进行两次记录,所以对比日志(forensic log)对于每个请求都包含两条记录。对比记录器(forensic logger)十分严格,不可以进行定制。它可以成为无价的调试和安全工具。</p>
    

    <h3><a name="pidfile" id="pidfile">PID文件</a></h3>
      

      <p>在启动时,Apache httpd将会在<code>logs/httpd.pid</code>文件中保存其父进程httpd的进程ID(process id[PID])。该文件名可以用<code class="directive"><a href="./mod/mpm_common.html#pidfile">PidFile</a></code>指令改变。该PID可以被管理员利用来重新启动或者终止服务器后台守护进程。在Windows中,可以使用命令行参数 -k 。更多信息请参见<a href="stopping.html">停止和重新启动</a>。</p>    
    

    <h3><a name="scriptlog" id="scriptlog">脚本日志</a></h3>
      

      <p>为了方便调试,可以用<code class="directive"><a href="./mod/mod_cgi.html#scriptlog">ScriptLog</a></code>指令来记录CGI脚本的输入和输出。此功能应该仅用于测试,而不应该用于正常工作的服务器。更多资料请参见<a href="mod/mod_cgi.html">mod_cgi</a>文档。</p>
    

    <h3><a name="rewritelog" id="rewritelog">重写日志</a></h3>
      

      <p>在使用强大且灵活的<a href="mod/mod_rewrite.html">mod_rewrite</a>时,几乎都有必要用<code class="directive"><a href="./mod/mod_rewrite.html#rewritelog">RewriteLog</a></code>来帮助调试。这个日志提供了重写引擎如何转换请求的详细分解信息,其详细程度取决于<code class="directive"><a href="./mod/mod_rewrite.html#rewriteloglevel">RewriteLogLevel</a></code>指令。</p>
    
  </div></div>
<div id="footer">
<p class="apache">本文允许自由使用、分发、转载,但必须保留译者署名;详见:<a href="./translator_announcement.html#announcement">译者声明</a>。</p>
<p class="menu"><a href="./mod/index.html">模块索引</a> | <a href="./mod/directives.html">指令索引</a> | <a href="./faq/index.html">常见问题</a> | <a href="./glossary.html">词汇表</a> | <a href="./sitemap.html">站点导航</a></p></div>
</body></html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -