• 2009-06-02

    IHS 中日志的设置 - [技术探索]

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://confusedday.blogbus.com/logs/40366724.html

    IHS中的access日志信息主要由Apache模块 mod_log_config来控制,他提供了三个指令来控制最终写成的日志信息。
    TransferLog指令用来指定日志文件,
    LogFormat指令用来定义日志格式,
    CustomLog指令可以则同时完成指定日志文件和定义日志格式。

    而其中LogFormat和CustomLog则是通过固定的字符串来替代请求的信息:


    特殊字符    意义
    %%        百分号(Apache2.0.44或更高的版本)
    %a        远端IP地址
    %A        本机IP地址
    %B        除HTTP头以外传送的字节数
    %b        以CLF格式显示的除HTTP头以外传送的字节数,也就是当没有字节传送时显示'-'而不是0。
    %{Foobar}C    在请求中传送给服务端的cookieFoobar的内容。
    %D        服务器处理本请求所用时间,以微为单位。
    %{FOOBAR}e    环境变量FOOBAR的值
    %f        文件名
    %h        远端主机
    %H        请求使用的协议
    %{Foobar}i    发送到服务器的请求头Foobar:的内容。
    %l        远端登录名(由identd而来,如果支持的话),除非IdentityCheck设为"On",否则将得到一个"-"。
    %m        请求的方法
    %{Foobar}n    来自另一个模块的注解Foobar的内容。
    %{Foobar}o    应答头Foobar:的内容。
    %p        服务器服务于该请求的标准端口。
    %P        为本请求提供服务的子进程的PID。
    %{format}P    服务于该请求的PID或TID(线程ID),format的取值范围为:pid和tid(2.0.46及以后版本)以及hextid(需要APR1.2.0及以上版本)
    %q        查询字符串(若存在则由一个"?"引导,否则返回空串)
    %r        请求的第一行
    %s        状态。对于内部重定向的请求,这个状态指的是原始请求的状态,---%>s则指的是最后请求的状态。
    %t        时间,用普通日志时间格式(标准英语格式)
    %{format}t    时间,用strftime(3)指定的格式表示的时间。(默认情况下按本地化格式)
    %T        处理完请求所花时间,以秒为单位。
    %u        远程用户名(根据验证信息而来;如果返回status(%s)为401,可能是假的)
    %U        请求的URL路径,不包含查询字符串。
    %v        对该请求提供服务的标准ServerName。
    %V        根据UseCanonicalName指令设定的服务器名称。
    %X        "请求完成时的连接状态:X= 连接在应答完成前中断。
            +=         应答传送完后继续保持连接。
            -=         应答传送完后关闭连接。
     
            (在1.3以后的版本中,这个指令是%c,但这样就和过去的SSL语法:%{var}c冲突了)
    %I        接收的字节数,包括请求头的数据,并且不能为零。要使用这个指令你必须启用mod_logio模块。
    %O        发送的字节数,包括请求头的数据,并且不能为零。要使用这个指令你必须启用mod_logio模块。

    譬如:

    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %t %u %v:%p(%P) %m-%H %TSec. %>s %b \"%U\" \"%q\"" common
    LogFormat "%{Referer}i -> %U" referer
    LogFormat "%{User-agent}i" agent
    CustomLog logs/access.log common

    1.使用LogFormat定义了四种日志格式:"combined/common/referer/agent"
    2.最后使用CustomLog指定:CustomLog logs/access.log common
      意义为日志文件为logs/access.log 日志格式为LogFormat定义的第二类格式"common"

    既最终显示:
    10.180.161.213 [03/May/2009:13:50:19 +0800] - @@ServerName@@:80(1616) POST-HTTP/1.1 1Sec.  200   11257    "/TWPOS/payment.do"    ""
    |_____%h_______|________%t________________|%u|______%v______:|%p(_%P_)|_%m-_%H_____|%TSec. |%>s |_%b    |\"%U_____________\" |\"%q\"
    |远端主机       |标准英语格式的时间         |用户|请求提供服务  |端口(进程)|请求-协议  |返回时间|状态|返回大小|请求URL             |是否是查询字符串

    参考文档:http://httpd.apache.org/docs/2.0/mod/mod_log_config.html#logformat


    历史上的今天:

    脚本彩色化 2009-06-02

    收藏到:Del.icio.us