zoukankan      html  css  js  c++  java
  • Apache日志优化

    apache执行时会记录其处理的全部请求的相关信息.同一时候,也会记录在处理过程中发生异常状况的相关信息.
    server能够用多种格式将与请求相关的活动信息记录在多个日志文件里,只是却仅仅能记录一份错误信息.
    关于活动记录,它是在请求完毕被处理后才会对日志内容进行写入.如一个大文件的上传,它是在文件上传完后才写入日志的.而错误信息是在发生错误时就写入.当然,错误的发生也是一瞬间的事.不会出现请求那种长时间处理.
    有一种通用的显示日志的方式:CLF(common log format).格式是:
    "%h %l %u %t "%r" %>s %b"
    但随着发展,这样的格式的内容不够多,人们又组织了还有一种格式:
    "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-agent}i""
    它能记住请求的浏览器版本号及其它client软件的名称与版本号等.
    Apache自带有一个标准的日志模块:mod_log_config.另外,Apache 2.0还带有一个额外的模块:mod_logio.它是前者的加强版.并且在http://modules.apache.org的模块注冊区还有其他的第三方模块可供使用.
    比如,我的Apache的httpd.conf文件里有例如以下配置:
    ErrorLog "logs/error.log"
    LogLevel warn
    <IfModule log_config_module>
        LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined
        LogFormat "%h %l %u %t "%r" %>s %b" common
        <IfModule logio_module>
          LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i" %I %O" combinedio
        </IfModule>
        CustomLog "logs/access.log" common
    </IfModule>
    在我的Apache安装文件夹下的logs文件夹下有两个文件,就是上面配置的error.log和access.log
    上面的配置先定义了Apache错误信息的日志输出.并定义了日志输出的等级.等级有例如以下几种:
     等级名称 介绍 
    emerg  紧急状况;server无法使用 
    alert  必须立马採取动作 
     crit 危险状况 
     error 出现错误 
     warn 警告 
     notice 正常,但有情况要注意 
     info 普通信息 
     debug 调试级别信息,包含模块执行状态
    设定一个等级后,日志文件里会记录它,以及它以上等级的日志.但无论设定为可值,永远都会记录notice等级的信息.

    日志中格式字符串:
    格式字符串 描写叙述
    %% 百分号(Apache2.0.44或更高的版本号)
    %a 远端IP地址
    %A 本机IP地址
    %B 除HTTP头以外传送的字节数
    %b 以CLF格式显示的除HTTP头以外传送的字节数,也就是当没有字节传送时显示'-'而不是0。
    %{Foobar}C 在请求中传送给服务端的cookieFoobar的内容。能够去cookie里的值
    %D server处理本请求所用时间,以微为单位。
    %{FOOBAR}e 环境变量FOOBAR的值
    %f 文件名称
    %h 远端主机
    %H 请求使用的协议
    %{Foobar}i 发送到server的请求头Foobar:的内容。
    %l 远端登录名(由identd而来。假设支持的话)。除非IdentityCheck设为"On",否则将得到一个"-"。

    %m 请求的方法
    %{Foobar}n 来自还有一个模块的注解Foobar的内容。

    %{Foobar}o 应答头Foobar:的内容。
    %p server服务于该请求的标准port。

    %P 为本请求提供服务的子进程的PID。
    %{format}P 服务于该请求的PID或TID(线程ID)。format的取值范围为:pidtid(2.0.46及以后版本号)以及hextid(须要APR1.2.0及以上版本号)
    %q 查询字符串(若存在则由一个"?"引导,否则返回空串)
    %r 请求的第一行(请求url和方式)
    %s 状态。

    对于内部重定向的请求,这个状态指的是原始请求的状态,---%>s则指的是最后请求的状态。

    %t 时间,用普通日志时间格式(标准英语格式)
    %{format}t 时间,用strftime(3)指定的格式表示的时间。(默认情况下按本地化格式)
    %T 处理完请求所花时间,以秒为单位。
    %u 远程username(依据验证信息而来。假设返回status(%s)为401,可能是假的)
    %U 请求的URL路径,不包括查询字符串。
    %v 对该请求提供服务的标准ServerName
    %V 依据UserCanonicalName指令设定的server名称。

    %X 请求完毕时的连接状态:
    X= 连接在应答完毕前中断。

    += 应答传送完后继续保持连接。
    -= 应答传送完后关闭连接。

    (在1.3以后的版本号中,这个指令是%c,但这样就和过去的SSL语法:%{var}c冲突了)

    %I 接收的字节数,包含请求头的数据,而且不能为零。要使用这个指令你必须启用mod_logio模块。
    %O 发送的字节数,包含请求头的数据。而且不能为零。要使用这个指令你必须启用mod_logio模块。


    依照日或小时记录请求日志
    ======================================
    使用CustomLog及rotatelogs(已经在apache的bin文件夹下包括:rotatelogs.exe.linux下文件夹可能不同):
    CustomLog "| bin/rotatelogs logs/access_log.%Y-%m-%d 86400" combined
    该配置会将日志输出到还有一程序,而非文件.即:rotatelogs.exe.这样,我们就能够在不重新启动Apache的情况下来生成新的文件.该脚本会在指定时间自己主动开启新文件,并写入日志.
    rotatelogs第一个參数是日志文件的文件路径和名:logs/access_log.%Y-%m-%d 86400 假设它包括有一个以上的%字符,则会被作为strftime(3)的格式字符串来处理;如上面的格式表示年月晶.否则,一个十位数长的更新时间( 秒为单位)会被附加到文件名称上.如:若文件名称为foo,则会产生如foo.1234567890的日志文件.而上面的文件则会产生:access_log.2011-04-25这种文件.
    第二个參数是两次更新时间的间隔(以秒为单位).当系统时间是此參数值的倍数时,它就会产生更新操作.如,一天有86400秒,若设定此境遇早每天午夜就会产生新的日志文件.
  • 相关阅读:
    Generator函数执行器-co函数库源码解析
    前端解读Webview
    javascript设计模式详解之策略模式
    javascript设计模式详解之命令模式
    【VBA】标准Sub/Function定义,带ScreenUpdating、On Error GoTo
    【VBA】全局数组定义
    【VBA】全局常量定义
    调试Java代码(Eclipse)汇总
    为Eclipse添加反编译插件,更好的调试
    Eclipse图标含义
  • 原文地址:https://www.cnblogs.com/slgkaifa/p/7112563.html
Copyright © 2011-2022 走看看