文章编号: 820729
展开全部 | 关闭全部

本文内容

概要

本文介绍了超文本传输??协议 (HTTP) API 的错误日志记录功能。

在基于 HTTP 的应用程序中发生的某些错误,可由 HTTP API 自动处理,而无需传回至应用程序进行处理。此行为的发生是因为这类错误的出现率可能大量充斥事件记录或应用程序处理程序。

以下主题介绍 HTTP API 错误日志记录的不同方面:

更多信息

配置 HTTP API 错误日志记录

若要我们为您配置 HTTP API 错误日志记录,请转到“帮我修复此问题”部分。如果您想亲自配置 HTTP API 错误日志记录,请转到“我自己修复此问题”部分。

帮我修复此问题



若要自动修复此问题,请单击“修复此问题”按钮或链接。在“文件下载”对话框中,单击“运行”,然后按照“修复此问题”向导中的步骤进行操作。

Disable HTTP API error logging
Microsoft Fix it 50635
Enable HTTP API error logging
Microsoft Fix it 50634


注意
  • 该向导可能只有英文版本。但是自动修复功能同样适用于其他语言版本的 Windows。
  • 如果所使用的计算机中并未出现此问题,则可将“修复此问题”解决方案保存至闪存驱动器或 CD 中,然后在出现此问题的计算机上运行该解决方案。



我自己修复此问题

HTTP \Parameters 项下方的三个注册表值可控制 HTTP API 错误日志记录。这些项位于以下注册表项:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters
注意 配置值的位置和格式在更高版本的 Microsoft Windows 操作系统中可能会有所更改。

您必须具有 Administrator/Local System 凭据才能更改注册表值,并查看或修改日志文件及包含这些文件的文件夹。

当 HTTP API 驱动程序启动时会读取注册表值中的配置信息。因此,如果您更改设置,则必须停止然后重新启动驱动程序,以读取新值。为此,请键入以下控制台命令:
net stop http
net start http
以下命名惯例用于为日志文件命名:
httperr + 序列号 + .log
示例:httperr4.log
日志文件在达到 ErrorLogFileTruncateSize 注册表值指定的最大大小时循环。此值不得小于 1 兆字节 (MB)。

如果错误日志记录的配置无效,或在 HTTP API 写入日志记录时发生任何类型的失败,HTTP API 都会使用事件日志记录来通知管理员错误日志记录没有发生。

下表介绍了注册表配置值。
收起该表格展开该表格
注册表值说明
EnableErrorLoggingDWORD 可设置为 TRUE,以启用错误日志记录,或者设置为 FALSE,以禁用错误日志记录。默认值是 TRUE。
ErrorLogFileTruncateSizeDWORD 指定错误日志文件的最大大小(以字节为单位)。默认值为 1 MB (0x100000)。

注意 指定的值不得小于默认值。
ErrorLoggingDir“字符串”指定 HTTP API 将其日志记录文件所放置在的文件夹。

HTTP API 可在指定文件夹中创建子文件夹 HTTPERR,然后在该子文件夹中存储日志文件。该子文件夹和日志文件收到相同的权限设置。管理员和本地系统帐户具有完全访问权限。其他用户没有访问权限。

以下是在注册表中未指定文件夹时的默认文件夹:
%SystemRoot%\System32\LogFiles

注意ErrorLoggingDir 字符串值必须是完全限定的本地路径。但是,它可以包含 %SystemRoot%。不能使用网络驱动器或网络共享。

HTTP API 错误日志的格式

通常,HTTP API 错误日志文件具有和 W3C 错误日志相同的格式,除了 HTTP 错误日志文件不包含列标题外。HTTP API 错误日志的每一行都记录一个错误。字段按特定顺序显示。单个空格字符 (0x0020) 将每一个字段与前一个字段分隔开。在每一个字段中,加号 (0x002B) 替换空格字符、标记和非打印控制字符。

下表标识了错误日志记录中的字段及字段顺序。
收起该表格展开该表格
字段说明
日期“日期”字段采用 W3C 格式。该字段基于协调世界时 (UTC)。“日期”字段始终采用十字符的 YYYY-MM-DD 格式。例如,2003 年 5 月 1 日表示为 2003-05-01。
时间“时间”字段采用 W3C 格式。该字段基于 UTC。“时间”字段始终采用八字符的 MM:HH:SS 格式。例如,5:30 PM (UTC) 表示为 17:30:00。
客户端 IP 地址受影响客户端的 IP 地址。该字段中的值可以是 IPv4 地址或 IPv6 地址。如果客户端 IP 地址是 IPv6 地址,则 ScopeId 字段也包含在该地址中。
客户端端口受影响客户端的端口号。
服务器 IP 地址受影响服务器的 IP 地址。该字段中的值可以是 IPv4 地址或 IPv6 地址。如果服务器 IP 地址是 IPv6 地址,则 ScopeId 字段也包含在该地址中。
服务器端口受影响服务器的端口号。
协议版本目前所使用的协议的版本。

如果连接未经过充分解析以确定协议版本,则使用连字符 (0x002D) 作为空字段的占位符。

如果经解析的主要版本号或次要版本号大于或等于 10,则将版本记录为 HTTP/?.?.
谓词由经解析的最后一次请求传递的谓词状态。包含未知谓词,但是任何超过 255 字节的谓词都被截断至此长度。如果没有可用的谓词,则使用连字符 (0x002D) 作为空字段的占位符。
CookedURL + QueryURL 及任何与其关联的查询都被记录为一个字段,并以问号分隔 (0x3F)。该字段在其 4096 字节的长度限制处被截断。

如果该 URL 已经被解析 ("cooked"),则它通过本地代码页转换进行记录,并被视为一个 Unicode 字段。

如果该 URL 在进行日志记录时还没有经过解析 ("cooked"),则会在没有任何 Unicode 转化的情况下准确复制该 URL。

如果 HTTP API 无法解析此 URL,则使用连字符 (0x002D) 作为空字段的占位符。
协议状态协议状态不得大于 999。

如果请求响应的协议状态可用,则它会在此字段中记录。

如果协议状态不可用,则使用连字符 (0x002D) 作为空字段的占位符。
SiteId不用于此版本的 HTTP API。占位符连字符 (0x002D) 始终在此字段中显示。
原因短语此字段包含可识别正被记录的错误类型的字符串。该字段绝不可留空。
队列名称这是请求队列名称。
以下示例行来自 HTTP API 错误日志:
2002-07-05 18:45:09 172.31.77.6 2094 172.31.77.6 80 HTTP/1.1 GET /qos/1kbfile.txt 503 – ConnLimit 2002-07-05 19:51:59 127.0.0.1 2780 127.0.0.1 80 HTTP/1.1 GET /ThisIsMyUrl.htm 400 – Hostname 2002-07-05 19:53:00 127.0.0.1 2894 127.0.0.1 80 HTTP/2.0 GET / 505 - Version_N/S 2002-07-05 20:06:01 172.31.77.6 64388 127.0.0.1 80 - - - - - Timer_MinBytesPerSecond

HTTP API 日志所记录的错误类型

HTTP API 日志错误响应客户端、连接超时、孤立的请求和因处理不当而丢弃的连接。

以下列表标识了 HTTP API 记录的错误类型:
  • 响应客户端HTTP API 向客户端发送错误响应,例如由上次接收请求中的解析错误导致的 400 错误。在 HTTP API 发送错误响应之后,它会终止连接。
  • 连接超时 HTTP API 使连接超时。如果在连接超时的时候有请求挂起,则该请求可用于在错误日志中提供有关该连接的详细信息。
  • 孤立的请求 用户模式进程意外退出,同时仍有路由到该进程的排队请求。HTTP API 在错误日志中记录了孤立的请求。
特定错误类型由始终显示为每个错误行最后一个字段的“原因短语”字符串来指定。下表标识了 HTTP API 原因短语。
收起该表格展开该表格
原因短语说明

AppOffline发生服务不可用错误(HTTP 错误 503)。服务不可用,因为应用程序错误导致该应用程序变为脱机状态。
AppPoolTimer发生服务不可用错误(HTTP 错误 503)。服务不可用,因为应用程序池进程太忙从而无法处理请求。
AppShutdown发生服务不可用错误(HTTP 错误 503)。服务不可用,因为应用程序因响应管理员策略而自动关闭。
BadRequest处理请求时出现解析错误。
Client_Reset在可以将请求分配给工作进程之前,客户端和服务器之间的连接已关闭。此行为的最常见原因是,客户端过早地关闭了它到服务器的连接。
Connection_Abandoned_By_AppPool来自应用程序池的工作进程已经意外退出,或者通过关闭其句柄孤立了挂起请求。
Connection_Abandoned_By_ReqQueue来自应用程序池的工作进程已经意外退出,或者通过关闭其句柄孤立了挂起请求。特定于 Windows Vista 和 Windows Server 2008。
Connection_Dropped在服务器可以发送其最终响应数据包之前,客户端和服务器之间的连接已关闭。此行为的最常见原因是,客户端过早地关闭了它到服务器的连接。
Connection_Dropped_List_Full客户端和服务器之间的丢弃连接的列表已满。特定于 Windows Vista 和 Windows Server 2008。
ConnLimit发生服务不可用错误(HTTP 错误 503)。该服务不可用,因为已达到或超过站点级别连接限制。
Connections_Refused内核 NonPagedPool 内存已下降到 20MB 以下,http.sys 已停止接收新连接。
已禁用发生服务不可用错误(HTTP 错误 503)。该服务不可用,因为管理员已将应用程序变为脱机状态。
EntityTooLarge实体超过了所允许的最大大小。
FieldLength已超过字段长度限制。
已禁止在解析时遇到已禁止的元素或序列。
标头标头中发生解析错误。
主机名在处理主机名时发生解析错误。
内部发生内部服务器错误(HTTP 错误 500)。
Invalid_CR/LF出现非法的回车或换行。
LengthRequired必需的长度值丢失。
N/A发生服务不可用错误(HTTP 错误 503)。该服务不可用,因为发生内部错误(如内存分配失败之类)。
N/I由于未知的转换编码,发生未执行错误(HTTP 错误 501),或服务不可用错误(HTTP 错误 503).
编号在处理编号时发生解析错误。
前提条件必需的前提条件丢失。
QueueFull发生服务不可用错误(HTTP 错误 503)。该服务不可用,因为应用程序请求队列已满。
RequestLength已超过请求长度限制。
Timer_AppPool连接已过期,因为某请求在服务器应用程序的应用程序池队列中等候时间过长,从而无法取消排队并处理它。该超时持续时间为 ConnectionTimeout。默认情况下,该值设置为两分钟。
Timer_ConnectionIdle连接过期并保持空闲。默认的 ConnectionTimeout 持续时间为两分钟。
Timer_EntityBody连接在请求实体到达之前过期。当请求确定具有实体时,HTTP API 将打开 Timer_EntityBody 计时器。最初,此计时器的限制设置为 ConnectionTimeout 值(通常为 2 分钟)。每当接收到与该请求有关的其他数据指示时,HTTP API 会重置计时器,以多给连接两分钟的时间(或 ConnectionTimeout 中指定的任意时间)。
Timer_HeaderWait连接超时,因为请求的标头解析时间超过了默认的两分钟限制。
Timer_MinBytesPerSecond连接超时,因为客户端未接收具有合理速度的响应。响应发送率慢于 240 字节/秒的默认值。这可以通过 MinFileBytesPerSec 元数据库属性控制。
Timer_ReqQueue连接已过期,因为某请求在服务器应用程序的应用程序池队列中等候时间过长,从而无法取消排队。该超时持续时间为 ConnectionTimeout。默认情况下,该值设置为两分钟。特定于 Windows Vista 和 Windows Server 2008。
Timer_Response已保留。当前未使用。
Timer_SslRenegotiation 连接已过期,因为客户端和服务器之间的 SSL 重新协商时间超过了默认的两分钟超时时间。
URL处理 URL 时发生解析错误。
URL_LengthURL 超过最大允许大小。
谓词处理谓词时解析发生错误。
Version_N/S发生版本不受支持的错误(HTTP 错误 505)。

参考

有关为 IIS HTTP 错误日志记录添加其他日志记录字段的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
832975 当前有其他属性可用于在 IIS 6.0 和 IIS 7.0 中的 Httperr#.log 文件内进行日志记录

属性

文章编号: 820729 - 最后修改: 2012年11月30日 - 修订: 7.0
关键字:?
kbhttphandlers kbhttp kbapi kberrmsg kbinfo kbfixme kbmsifixme KB820729
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com