W3C 日志记录

W3C 扩展日志记录是可在服务器会话或 URL 组中启用的服务器端日志记录类型。 在 URL 组上启用 W3C 日志记录时,仅对路由到 URL 组的请求执行日志记录。 为每个配置为启用 W3C 日志记录的 URL 组创建单独的日志文件。

在服务器会话上启用 W3C 日志记录时,它充当服务器会话下所有 URL 组的集中式日志记录形式。 服务器会话中的所有 URL 组都维护单个日志文件。

下表列出了 HTTP 服务器 API 可以记录的字段。 该表包含 HTTP_LOG_FIELD 常量子集。 下面列出的某些字段由 HTTP 服务器 API 在内部自动生成,因此不包含在 HTTP_LOG_FIELDS_DATA 结构中。 “显示为”列包含日志文件中显示的文本。 表中的数据按日志文件记录中的匹配顺序排列。

未标记为“生成的 HTTP 服务器 API”的字段必须按应用程序在 HTTP_LOG_FIELDS_DATA 结构内传递。 应用程序可以从传递给它的 HTTP_REQUEST 结构生成这些字段。

字段 显示为 说明 HTTP_LOG_FIELDS_DATA成员 HTTP_LOG_FIELDS常量
日期 date 活动发生的日期。 生成的 HTTP 服务器 API。 HTTP_LOG_FIELD_DATE
时间 time 时间,在协调的环球时间 (UTC) ,在该时间发生活动。 生成的 HTTP 服务器 API。 HTTP_LOG_FIELD_TIME
服务名称和实例编号 s-sitename 在客户端上运行的 Internet 服务名称和实例编号。 ServiceName HTTP_LOG_FIELD_SITE_NAME
服务器名称 s-computername 生成日志文件条目的服务器的名称。 ServerName HTTP_LOG_FIELD_COMPUTER_NAME
服务器 IP 地址 s-ip 生成日志文件条目的服务器 IP 地址。 ServerIp HTTP_LOG_FIELD_SERVER_IP
方法 cs-method 请求的谓词,例如 GET 方法。 方法 HTTP_LOG_FIELD_METHOD
URI 词干 cs-uri-stem 谓词的目标,例如,Default.htm。 UriStem HTTP_LOG_FIELD_URI_STEM
URI 查询 cs-uri-query 客户端尝试执行的查询(如果有)。 只有动态页面才需要统一资源标识符 (URI) 查询。 UriQuery HTTP_LOG_FIELD_URI_QUERY
服务器端口 s-port 为服务配置的服务器端口号。 ServerPort HTTP_LOG_FIELD_SERVER_PORT
用户名 cs-username 访问服务器的经身份验证的用户名。 匿名用户会以连字符表示。 UserName HTTP_LOG_FIELD_USER_NAME
客户端 IP 地址 c-ip 发出请求的客户端的 IP 地址。 ClientIp HTTP_LOG_FIELD_CLIENT_IP
协议版本 cs-version 客户端使用的 HTTP 协议版本。 生成的 HTTP 服务器 API。 HTTP_LOG_FIELD_VERSION
用户代理 cs (User-Agent) 客户端使用的浏览器类型。 UserAgent HTTP_LOG_FIELD_USER_AGENT
Cookie cs (Cookie) 发送或接收的 Cookie 内容(如果有)。 Cookie HTTP_LOG_FIELD_COOKIE
Referrer cs (引用者) 用户上次访问的网站。 此站点提供指向当前站点的链接。 Referrer HTTP_LOG_FIELD_REFERRER
主机 cs-host 主机标头名称(如果有)。 主机 HTTP_LOG_FIELD_HOST
HTTP 状态 sc-status HTTP 状态代码。 ProtocolStatus HTTP_LOG_FIELD_STATUS
协议子状态 sc-substatus 子状态错误代码。 SubStatus HTTP_LOG_FIELD_SUB_STATUS
Win32 状态 sc-win32-status Windows状态代码。 Win32Status HTTP_LOG_FIELD_WIN32_STATUS
发送的字节数 sc-bytes 服务器发送的字节数。 生成的 HTTP 服务器 API。 HTTP_LOG_FIELD_BYTES_SENT
接收的字节数 cs-bytes 服务器接收和处理的字节数。 生成的 HTTP 服务器 API。 HTTP_LOG_FIELD_BYTES_RECV
所用时间 所花的时间 操作所用的时间长度(以毫秒为单位)。 生成的 HTTP 服务器 API。 HTTP_LOG_FIELD_TIME_TAKEN
流 ID streamid 流 ID。 生成的 HTTP 服务器 API。 HTTP_LOG_FIELD_STREAM_ID

 

日志文件是一种可自定义的 ASCII 基于文本的格式。 文件中的字段前缀定义如下:

前缀 说明
s 服务器操作。
c 客户端操作。
Sc 服务器到客户端操作。
cs 客户端到服务器操作。

 

但是,应用程序可以选择一个或多个 W3C 扩展日志文件字段,但并非所有字段都将包含信息。 对于选定但没有信息的字段,连字符 () 显示为占位符。 如果字段包含不可打印字符,则 HTTP 服务器 API 会将它替换为加号 (+) 以保留日志文件格式。 这通常发生在病毒攻击中,例如,恶意用户发送回车符和换行符,如果不替换为加号 (+) ,则会中断日志文件格式。 字段用空格分隔。

如果某个字段由 URL 组或服务器会话启用,但未为请求选择,则会在日志文件中以连字符 () 作为占位符显示。

当第一个请求到达 URL 组或服务器会话时,不会创建日志文件,在配置日志记录时不会创建这些文件。 以下示例显示了启用了客户端 IP、用户名、服务器 IP、服务器端口、方法、URI 词干、URI 查询、状态和用户代理字段的 W3C 日志文件的第一个日志文件条目:

#Software: Microsoft HTTP Server API 2.0  
#Version: 1.0   // the log file version as it's described by "https://www.w3.org/TR/WD-logfile".
#Date: 2002-05-02 17:42:15  // when the first log file entry was recorded, which is when the entire log file was created.
#Fields: date time c-ip cs-username s-ip s-port cs-method cs-uri-stem cs-uri-query sc-status cs(User-Agent)
2002-05-02 17:42:15 172.22.255.255 - 172.30.255.255 80 GET /images/picture.jpg - 200 Mozilla/4.0+(compatible;MSIE+5.5;+Windows+2000+Server)

在分析请求之前,HTTP 服务器 API 收到第一个字节之前,将初始化所花费的时间字段。 上次发送完成时,时间戳将停止。 花费的时间不会反映整个网络的时间。 对站点的第一个请求显示的时间略长于其他类似请求,因为 HTTP 服务器 API 使用第一个请求打开日志文件。