Este artigo descreve os recursos de log de erro de APIs para protocolo HTTP (Hypertext Transfer).
Alguns erros de aplicativos com base em HTTP são manipulados automaticamente pela API do HTTP, em vez de serem devolvidos ao aplicativo e solucionados por ele. Isso acontece porque a frequência desses erros pode encher o log de um evento ou o manipulador de um aplicativo.
Os tópicos a seguir descrevem os diferentes aspectos de log de erro de API de HTTP:
- Configurar o log de erro de API de HTTP
As configurações de registro controlam os erros de log das APIs de HTTP, o tamanho máximo permitido para os arquivos de log e o local dos arquivos de log. - Formato dos logs de erro das APIs de HTTP
A API de HTTP cria arquivos de log que estão em conformidade com as convenções de arquivo de log do World Wide Web Consortium (W3C). Você pode usar ferramentas padrão para analisar esses arquivos de log. No entanto, ao contrário dos arquivos de log do W3C, os arquivos de log das APIs de HTTP não contêm os nomes das colunas. - Tipos de erros que a API de HTTP registra
A API de HTTP registra uma variedade de erros comuns.
Configurar erro de log no API HTTP
Para que possamos configurar o log de erros HTTP API para você, vá para a seção "
Sorrigir para mim". Se você preferir configurar o log de erros das APIs de HTTP sozinho, vá para a seção "
Desejo corrigir sozinho".
Corrigir para mim
Para corrigir esse problema automaticamente, clique no botão ou no link
Corrigir. Na caixa de diálogo
Download de Arquivos, clique em
Executar e siga as etapas no Assistente Fix it.
Observações- Este assistente pode estar apenas em inglês. No entanto, a correção automática também funciona em versões do Windows em outros idiomas.
- Se você não estiver usando o computador que apresenta o problema, salve a solução Fix it em uma unidade flash ou em um CD e execute-a no computador que apresenta o problema.
Desejo corrigir sozinho
Três valores de registro em uma chave
HTTP \Parameters controlam o log de erro de APIs de HTTP. Essas chaves estão localizadas na seguinte chave de registro:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters
Observação O local e a forma dos valores de configuração podem ser alterados em versões posteriores do sistema operacional Microsoft Windows.
Você deve possuir credenciais de Administrador/Sistema Local para alterar os valores de registro e para visualizar ou modificar os arquivos de log e a pasta que os contém.
As informações de configuração para os valores do registro são lidas quando o driver de API de HTTP é iniciado. Portanto, se você alterar as configurações, deverá parar e reiniciar o driver para ler os novos valores. Para isso, digite os seguintes comandos de console:
net stop http
net start http
A seguinte convenção é usada para nomear os arquivos de log:
httperr + número de sequenciação + .log
Exemplo: httperr4.log
Os arquivos de log são alternados quando atingem o tamanho máximo especificado pelo valor de registro
ErrorLogFileTruncateSize. Esse valor não pode ser menor que um megabyte (MB).
Se a configuração do log de erro não for válida ou se ocorrer algum tipo de falha enquanto a API de HTTP está gravando nos arquivos de log, a API de HTTP usará o log de eventos para avisar aos administradores que o log de erro não está sendo realizado.
A tabela a seguir descreve os valores de configuração do registro.
Recolher esta tabelaExpandir esta tabela
| Valor do Registro | Descrição |
| EnableErrorLogging | Uma DWORD que pode ser definida como TRUE para a habilitação do log de erro ou como FALSE para sua desabilitação. O valor padrão é TRUE. |
| ErrorLogFileTruncateSize | Uma DWORD que especifica o tamanho máximo de um arquivo de log de erro, em bytes. O valor padrão é um MB (0x100000).
Observação O valor especificado não pode ser menor que o valor padrão. |
| ErrorLoggingDir | Uma sequência de caracteres que especifica a pasta em que a API de HTTP coloca seus arquivos de log.
A API de HTTP cria uma subpasta HTTPERR na pasta especificada e armazena os arquivos de log na subpasta. Essa subpasta e os arquivos de log recebem as mesmas configurações de permissão. O administrador e as contas do Sistema Local têm acesso total. Outros usuários não têm acesso.
Esta será a pasta padrão quando não for especificada uma pasta no registro: %SystemRoot%\System32\LogFiles
Observação O valor da sequência de caracteres ErrorLoggingDir deve ser um caminho local totalmente qualificado. No entanto, ele pode conter %SystemRoot%. Uma unidade de rede ou compartilhamento de rede não pode ser usado. |
Formato dos logs de erro das APIs de HTTP
Geralmente, os arquivos de log de erro das APIs de HTTP têm o mesmo formato que os logs de erro W3C, exceto pelo fato que os arquivos de log de erro das APIs de HTTP não contêm títulos das colunas. Cada linha de um log de erro de API de HTTP registra um erro. Os campos aparecem em uma ordem específica. Um caractere de espaço simples (0x0020) separa cada campo do campo anterior. Em cada campo, os sinais de adição (0x002B) substituem os espaços, tabulações e caracteres de controle não imprimíveis.
A tabela a seguir identifica os campos e a ordem dos campos em um registro de log de erro.
Recolher esta tabelaExpandir esta tabela
| Campo | Descrição |
| data | O campo Data segue o formato W3C. Este campo baseia-se no tempo Universal Coordenado (UTC). O campo de Data será sempre de dez caracteres, no formato aaaa-mm-dd. Por exemplo, 1º de maio de 2003 será 2003-05-01. |
| hora | O campo Hora segue o formato W3C. Este campo baseia-se em UTC. O campo de tempo terá sempre oito caracteres na forma MM:HH:SS. Por exemplo, 5:30 PM (UTC) é expresso como 17:30:00. |
| Endereço IP do cliente | O endereço IP do cliente afetado. O valor neste campo pode ser um endereço IPv4 ou um endereço IPv6. Se o endereço IP do cliente for um endereço IPv6, o campo ScopeId também estará incluído no endereço. |
| Porta do cliente | O número da porta do cliente afetado. |
| Endereço IP do servidor | O endereço IP do servidor afetado. O valor neste campo pode ser um endereço IPv4 ou um endereço IPv6. Se o endereço IP do servidor for um endereço IPv6, o campo ScopeId também estará incluído no endereço. |
| Porta do servidor | O número da porta do servidor afetado. |
| Versão do protocolo | A versão do protocolo que está sendo usado.
Se a conexão não foi analisada o suficiente para determinar a versão do protocolo, um hífen (0x002D) será usado como espaço reservado para o campo vazio.
Se o maior número de versão ou o menor número de versão analisado for maior ou igual a 10, a versão será registrada como HTTP/?.?. |
| Verbo | O estado do verbo que a última solicitação a ser analisada passa. Verbos desconhecidos estão incluídos, mas qualquer verbo com mais de 255 bytes será truncado para esse comprimento. Se um verbo não estiver disponível, um hífen (0x002D) será usado como um espaço reservado para o campo vazio. |
| CookedURL + consulta | A URL e qualquer consulta associada a ela são registrados como um campo separado por um ponto de interrogação (0x3F). Este campo será truncado no limite de comprimento de 4096 bytes.
Se esta URL foi analisada (processada), ela está registrada com a conversão de página de código local e é tratada como um campo Unicode.
Se esta URL não foi analisada (processada) no momento do registro, ela será copiada exatamente igual, sem conversão para Unicode.
Se a API de HTTP não conseguir analisar esta URL, um hífen (0x002D) será usado como um espaço reservado para o campo vazio. |
| Status de protocolo | O status do protocolo não pode ser maior que 999.
Se o status do protocolo da resposta a uma solicitação estiver disponível, ele estará registrado neste campo.
Se o status do protocolo não estiver disponível, um hífen (0x002D) será usado como um espaço reservado para o campo vazio. |
| SiteId | Não usada nesta versão da API de HTTP. Um hífen (0x002D) de espaço reservado sempre aparece neste campo. |
| Frase de motivo | Este campo contém uma sequência de caracteres que identifica o tipo de erro que está sendo registrado. Este campo nunca estará vazio. |
| Nome da Fila | Este é o nome de fila de solicitação.
|
As linhas de exemplo a seguir são de um log de erro de API de HTTP:
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
Tipos de erros que a API de HTTP registra
A API de HTTP registra respostas de erros a clientes, tempos limite da conexão, solicitações órfãs e conexões interrompidas que foram manipulados incorretamente.
A seguinte lista identifica os tipos de erros que a API de HTTP registra:
- Respostas a clientes A API de HTTP envia uma resposta de erro a um cliente. Por exemplo, um erro 400 causado por um erro de análise na última solicitação recebida. Depois que a API de HTTP envia a resposta de erro, ela encerra a conexão.
- Tempos limite de conexão A API de HTTP encerra uma conexão. Se uma solicitação estiver pendente no momento em que a conexão atingir o tempo limite, ela será usada para fornecer mais informações sobre a conexão no log de erros.
- Solicitações órfãs Um processo de modo de usuário é encerrado inesperadamente enquanto ainda há solicitações na fila a serem encaminhadas para o processo. A API de HTTP registra as solicitações órfãs no log de erros.
Tipos de erros específicos são designados pelas sequências de caracteres
Frase de motivo que sempre aparecem no último campo de cada linha de erro. A tabela a seguir identifica as frases de motivo da API de HTTP.
Recolher esta tabelaExpandir esta tabela
| Frase de motivo | Descrição
|
| AppOffline | Erro de serviço indisponível (um erro 503 de HTTP). O serviço não está disponível porque os erros do aplicativo fizeram com que o aplicativo fosse colocado off-line. |
| AppPoolTimer | Erro de serviço indisponível (um erro 503 de HTTP). O serviço não está disponível porque o processo de pool de aplicativos está muito ocupado para manipular a solicitação. |
| AppShutdown | Erro de serviço indisponível (um erro 503 de HTTP). O serviço não está disponível porque o aplicativo desligou-se automaticamente em resposta à diretiva do administrador. |
| BadRequest | Erro de análise ao processar uma solicitação. |
| Client_Reset | A conexão entre o cliente e o servidor foi encerrada antes que a solicitação fosse atribuída a um processo de trabalho. A causa mais comum para esse comportamento é o cliente encerrar prematuramente a conexão com o servidor. |
| Connection_Abandoned_By_AppPool | Um processo de trabalho do pool de aplicativos foi encerrado inesperadamente ou deixou órfã uma solicitação pendente, fechando o manipulador que a conduzia. |
| Connection_Abandoned_By_ReqQueue | Um processo de trabalho do pool de aplicativos foi encerrado inesperadamente ou deixou órfã uma solicitação pendente, fechando o manipulador que a conduzia. Específico para Windows Vista e Windows Server 2008. |
| Connection_Dropped | A conexão entre o cliente e o servidor foi encerrada antes que o servidor enviasse o pacote de resposta final. A causa mais comum para esse comportamento é o cliente encerrar prematuramente a conexão com o servidor. |
| Connection_Dropped_List_Full | A lista de queda de conexões entre clientes e o servidor está cheia. Específico para Windows Vista e Windows Server 2008. |
| ConnLimit | Erro de serviço indisponível (um erro 503 de HTTP). O serviço não está disponível porque o limite de conexões no nível do site foi atingido ou excedido. |
| Connections_Refused | A memória NonPagedPool do kernel caiu abaixo de 20 MB e o http.sys parou de receber novas conexões |
| Desativado | Erro de serviço indisponível (um erro 503 de HTTP). O serviço não está disponível porque um administrador assumiu o aplicativo off-line. |
| EntityTooLarge | Uma entidade excedeu o tamanho máximo permitido. |
| FieldLength | Um limite de comprimento de campo foi excedido. |
| Proibido | Um elemento ou sequência proibida foi encontrado durante a análise. |
| Cabeçalho | Erro de análise em um cabeçalho. |
| Nome do host | Erro de análise ao processar um nome do host. |
| Interno | Erro de servidor interno (um erro 500 de HTTP). |
| Invalid_CR/LF. | Ocorreu um retorno de carro ou alimentação de linha ilegal. |
| LengthRequired | Um valor de comprimento necessário estava ausente. |
| N/A | Erro de serviço indisponível (um erro 503 de HTTP). O serviço não está disponível por causa de um erro interno (como, por exemplo, uma falha de alocação de memória). |
| N/I | Erro não implementado (um erro 501 de HTTP) ou erro de serviço indisponível (um erro 503 de HTTP) por conta de uma codificação de transferência desconhecida. |
| Número | Erro de análise ao processar um número. |
| Pré-condição | Uma pré-condição necessária estava ausente. |
| QueueFull | Erro de serviço indisponível (um erro 503 de HTTP). O serviço não está disponível porque a fila de solicitações do aplicativo está cheia. |
| RequestLength | Um limite de comprimento de solicitações foi excedido. |
| Timer_AppPool | A conexão expirou porque uma solicitação atingiu o tempo limite em uma fila de pool de aplicativos antes que um aplicativo de servidor a retirasse da fila e a processasse. A duração do tempo limite é ConnectionTimeout. Por padrão, esse valor é definido para dois minutos. |
| Timer_ConnectionIdle | A conexão expirou e permanece ociosa. A duração padrão ConnectionTimeout é de dois minutos. |
| Timer_EntityBody | A conexão expirou antes que o corpo da entidade de solicitação chegasse. Quando está claro que uma solicitação tem um corpo de entidade, a API de HTTP ativa o timer Timer_EntityBody. Inicialmente, o limite do temporizador é definido para o valor ConnectionTimeout (normalmente de 2 minutos). Sempre que outra indicação de dados for recebida nesta solicitação, a API de HTTP redefine o timer para fornecer à conexão dois minutos (ou o que estiver especificado em ConnectionTimeout). |
| Timer_HeaderWait | A conexão expirou porque a análise do cabeçalho de uma solicitação demorou mais que o limite padrão de dois minutos. |
| Timer_MinBytesPerSecond | A conexão expirou porque o cliente não recebeu uma resposta a uma velocidade razoável. A taxa de envio de resposta foi mais lenta do que o padrão de 240 bytes por segundo. Isso pode ser controlado com a propriedade de metabase MinFileBytesPerSec. |
| Timer_ReqQueue | A conexão expirou porque uma solicitação atingiu o tempo limite em uma fila de pool de aplicativos antes que um aplicativo de servidor a retirasse da fila. A duração do tempo limite é ConnectionTimeout. Por padrão, esse valor é definido para dois minutos. Específico para Windows Vista e Windows Server 2008. |
| Timer_Response | Reservado. Não usado no momento. |
| URL | Erro de análise ao processar uma URL. |
| URL_Length | Uma URL excedeu o tamanho máximo permitido. |
| Verbo | Erro de análise ao processar um verbo. |
| Version_N/S. | Erro de versão não suportada (um erro 505 de HTTP). |
Para obter mais informações sobre como adicionar campos para o log de erros de HTTP do IIS, clique no número de artigo abaixo na Base de Dados de Conhecimento Microsoft :
832975
(http://support.microsoft.com/kb/832975/pt-br/
)
As propriedades adicionais estão disponíveis para registro no arquivo Httperr#.log no IIS 6.0 e IIS 7.0