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常量 |
---|---|---|---|---|
日期 | 日期 | 活动的发生日期。 | 生成的 HTTP 服务器 API。 | HTTP_LOG_FIELD_DATE |
时间 | 时间 | 发生活动的协调世界时(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 |
饼干 | cs(Cookie) | 发送或接收的 Cookie 的内容(如果有)。 | 饼干 | HTTP_LOG_FIELD_COOKIE |
引荐 | cs(引用者) | 用户上次访问的网站。 此网站提供了指向当前网站的链接。 | 引荐 | 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 使用第一个请求打开日志文件。