HTTP API'lerinde günlüğe kaydetme hatası

Bu makalede, Köprü Metni Aktarım Protokolü (HTTP) uygulama programlama arabirimlerinin (API) hata günlüğe kaydetme özellikleri açıklanmaktadır.

Orijinal ürün sürümü: Windows Server 2008 R2, Windows Server 2008, Windows Server 2012 R2, Windows Server 2012, Windows 10, Windows 8.1
Özgün KB numarası: 820729

Özet

HTTP tabanlı bir uygulamada oluşan bazı hatalar, işleme için bir uygulamaya geri geçirilmek yerine HTTP API'si tarafından otomatik olarak işlenir. Bu tür hataların sıklığı aksi takdirde bir olay günlüğünü veya uygulama işleyicisini kapsayabileceği için bu davranış oluşur.

Aşağıdaki konularda HTTP API hata günlüğünün farklı yönleri açıklanmaktadır.

  • HTTP API hata günlüğünü yapılandırma
    Kayıt defteri ayarları HTTP API günlükleri hatalarını, izin verilen en büyük günlük dosyalarının boyutunu ve günlük dosyalarının konumunu denetler.

  • HTTP API hata günlüklerinin biçimi
    HTTP API'sinde World Wide Web Consortium (W3C) günlük dosyası kurallarına uygun günlük dosyaları oluşturulur. Bu günlük dosyalarını ayrıştırmak için standart araçları kullanabilirsiniz. Ancak, W3C günlük dosyalarının aksine, HTTP API günlük dosyaları sütun adlarını içermez.

  • HTTP API'sinin günlüğe kaydeden hata türleri
    HTTP API'sinde birçok yaygın hata günlüğe kaydedilir.

Aşağıdaki yöntemler HTTP API hata günlüğünün çözümünü açıklar.

HTTP API hata günlüğünü yapılandırma

HTTP \Parameters anahtarı altındaki üç kayıt defteri değeri, HTTP API hata günlüğünü denetler. Bu anahtarlar kayıt defteri anahtarında bulunur: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters.

Not

Yapılandırma değerlerinin konumu ve biçimi Windows işletim sisteminin sonraki sürümlerinde değişebilir.

Kayıt defteri değerlerini değiştirmek ve günlük dosyalarını ve bunları içeren klasörü görüntülemek veya değiştirmek için Yönetici/Yerel Sistem kimlik bilgilerine sahip olmanız gerekir.

HTTP API sürücüsü başlatıldığında kayıt defteri değerlerindeki yapılandırma bilgileri okunur. Bu nedenle, ayarları değiştirirseniz, yeni değerleri okumak için sürücüyü durdurmanız ve sonra yeniden başlatmanız gerekir. Bunu yapmak için aşağıdaki konsol komutlarını yazın:

net stop http
net start http

Günlük dosyalarını adlandırmak için aşağıdaki adlandırma kuralı kullanılır:
httperr + sıra numarası + .log
Örnek: httperr4.log

Günlük dosyaları, ErrorLogFileTruncateSize kayıt defteri değerinin belirttiği boyut üst sınırına ulaştığında döngüye alınır. Bu değer 1 megabayttan (MB) küçük olamaz.

Hata günlüğünün yapılandırması geçerli değilse veya HTTP API günlük dosyalarına yazarken herhangi bir hata oluşursa, HTTP API'si yöneticilere hata günlüğünün gerçekleşmediğini bildirmek için olay günlüğünü kullanır.

Aşağıdaki tabloda kayıt defteri yapılandırma değerleri açıklanmaktadır.

Kayıt defteri değeri Açıklama
EnableErrorLogging Hata günlüğünü etkinleştirmek için TRUE veya devre dışı bırakmak için FALSE olarak ayarlayabileceğiniz bir DWORD. Varsayılan değer TRUE'dır.
ErrorLogFileTruncateSize Hata günlüğü dosyasının bayt cinsinden en büyük boyutunu belirten bir DWORD. Varsayılan değer 1 MB'tır (0x100000).

Belirtilen değer varsayılan değerden küçük olamaz.
ErrorLoggingDir HTTP API'sinin günlük dosyalarını yerleştirdiği klasörü belirten bir Dize.

HTTP API'si belirtilen klasörde bir alt klasör HTTPERR oluşturur ve ardından günlük dosyalarını alt klasörde depolar. Bu alt klasör ve günlük dosyaları aynı izin ayarlarını alır. Yönetici ve Yerel Sistem Hesapları tam erişime sahiptir. Diğer kullanıcıların erişimi yoktur.

Aşağıdaki örnek, kayıt defterinde klasör belirtilmediğinde varsayılan klasördür:
%SystemRoot%\System32\LogFiles

ErrorLoggingDir dize değeri tam bir yerel yol olmalıdır. Ancak, içerebilir %SystemRoot%. Ağ sürücüsü veya ağ paylaşımı kullanılamaz.

HTTP API hata günlüklerinin biçimi

GENELLIKLE, HTTP API hata günlüğü dosyaları W3C hata günlükleriyle aynı biçime sahiptir, ancak HTTP API hata günlüğü dosyaları sütun başlıkları içermez. HTTP API hata günlüğünün her satırı bir hata kaydeder. Alanlar belirli bir sırada görünür. Tek bir boşluk karakteri (0x0020) her alanı önceki alandan ayırır. Her alanda artı işaretleri (0x002B) boşluk karakterlerini, sekmeleri ve yazdırılamayan denetim karakterlerini değiştirir.

Aşağıdaki tablo, bir hata günlüğü kaydındaki alanları ve alanların sırasını tanımlar.

Alan Açıklama
Tarih Tarih alanı W3C biçimini izler. Bu alan Eşgüdümlü Evrensel Saati (UTC) temel alır. Tarih alanı her zaman YYYY-AA-GG biçiminde 10 karakterdir. Örneğin, 1 Mayıs 2003 2003-05-01 olarak ifade edilir.
Saat Saat alanı W3C biçimini izler. Bu alan UTC'ye dayalıdır. Zaman alanı her zaman MM:HH:SS biçiminde sekiz karakterdir. Örneğin, 17:30 (UTC) 17:30:00 olarak ifade edilir.
İstemci İnternet Protokolü (IP) Adresi Etkilenen istemcinin IP adresi. Bu alandaki değer bir IPv4 adresi veya IPv6 adresi olabilir. İstemci IP adresi bir IPv6 adresiyse, ScopeId alanı da adrese eklenir.
İstemci Bağlantı Noktası Etkilenen istemcinin bağlantı noktası numarası.
Sunucu IP Adresi Etkilenen sunucunun IP adresi. Bu alandaki değer bir IPv4 adresi veya IPv6 adresi olabilir. Sunucu IP adresi bir IPv6 adresiyse, ScopeId alanı da adrese eklenir.
Sunucu Bağlantı Noktası Etkilenen sunucunun bağlantı noktası numarası.
Protokol Sürümü Kullanılan protokolün sürümü.

Bağlantı protokol sürümünü belirlemek için yeterince ayrıştırılmamışsa, boş alan için yer tutucu olarak kısa çizgi (0x002D) kullanılır.

Ana sürüm numarası veya ayrıştırılan ikincil sürüm numarası 10'dan büyük veya buna eşitse, sürüm HTTP/?.?. olarak günlüğe kaydedilir
Fiil Fiil, ayrıştırılan son isteğin geçişlerini belirtir. Bilinmeyen fiiller dahil edilir, ancak 255 bayttan uzun olan tüm fiiller bu uzunlukta kesilir. Fiil kullanılamıyorsa, boş alan için yer tutucu olarak kısa çizgi (0x002D) kullanılır.
CookedURL + Sorgu URL ve onunla ilişkilendirilmiş tüm sorgular, soru işareti (0x3F) ile ayrılmış tek bir alan olarak günlüğe kaydedilir. Bu alan 4.096 bayt uzunluk sınırında kesilir.

Bu URL ayrıştırıldıysa ("pişmiş"), yerel kod sayfası dönüştürmesiyle günlüğe kaydedilir ve Unicode alanı olarak kabul edilir.

Bu URL günlüğe kaydetme sırasında ayrıştırılmamışsa ("pişmiş") unicode dönüştürme olmadan tam olarak kopyalanır.

HTTP API'si bu URL'yi ayrıştıramıyorsa, boş alan için yer tutucu olarak kısa çizgi (0x002D) kullanılır.
Protokol Durumu Protokol durumu 999'dan büyük olamaz.

bir isteğe verilen yanıtın protokol durumu varsa, bu alanda günlüğe kaydedilir.

Protokol durumu kullanılamıyorsa, boş alan için yer tutucu olarak kısa çizgi (0x002D) kullanılır.
Siteıd HTTP API'sinin bu sürümünde kullanılmaz. Bu alanda her zaman bir yer tutucu kısa çizgi (0x002D) görüntülenir.
Neden tümceciği Bu alan, günlüğe kaydedilen hata türünü tanımlayan bir dize içerir. Bu alan hiçbir zaman boş bırakılmaz.
Kuyruk Adı İstek kuyruğu adıdır.

Aşağıdaki örnek satırlar bir HTTP API hata günlüğünden alınmaktadır:

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'sinin günlüğe kaydeden hata türleri

HTTP API'sinde istemcilere, bağlantı zaman aşımlarına, yalnız bırakılmış isteklere ve hatalı işlenen bırakılan bağlantılara yönelik hata yanıtları günlüğe kaydedilir.

Aşağıdaki liste, HTTP API'sinin günlüğe aldığı hata türlerini tanımlar:

  • İstemcilere yanıtlar
    HTTP API bir istemciye hata yanıtı gönderir; örneğin, son alınan istekteki ayrıştırma hatasının neden olduğu 400 hatası. HTTP API'si hata yanıtını gönderdikten sonra bağlantıyı kapatır.

  • Bağlantı zaman aşımları
    HTTP API'sinde bağlantı zaman aşımına uğradı. Bağlantı zaman aşımına uğradıklarında istek bekliyorsa, hata günlüğünde bağlantı hakkında daha fazla bilgi sağlamak için istek kullanılır.

  • Yalnız bırakılmış istekler
    Kullanıcı modu işlemi, hala bu işleme yönlendirilen kuyruğa alınmış istekler varken beklenmedik bir şekilde durdurulur. HTTP API'sinde yalnız bırakılmış istekler hata günlüğüne kaydedilir. Belirli hata türleri, her zaman her hata satırının son alanı olarak görünen Reason Phrase dizeleriyle adlandırılır. Aşağıdaki tabloda HTTP API Neden tümcecikleri tanımlanmıştır.

Neden tümceciği Açıklama
AppOffline Hizmet kullanılamıyor hatası oluştu (HTTP hatası 503). Uygulama hataları uygulamanın çevrimdışına alınmasına neden olduğundan hizmet kullanılamıyor.
AppPoolTimer Hizmet kullanılamıyor hatası oluştu (HTTP hatası 503). Uygulama havuzu işlemi isteği işleyemeyecek kadar meşgul olduğundan hizmet kullanılamıyor.
AppShutdown Hizmet kullanılamıyor hatası oluştu (HTTP hatası 503). Uygulama yönetici ilkesine yanıt olarak otomatik olarak kapandığından hizmet kullanılamıyor.
BadRequest İstek işlenirken ayrıştırma hatası oluştu.
Client_Reset İstek bir çalışan işlemine atanmadan önce istemci ile sunucu arasındaki bağlantı kapatıldı. Bu davranışın en yaygın nedeni, istemcinin sunucu bağlantısını erken kapatmasıdır.
Connection_Abandoned_By_AppPool Uygulama havuzundan bir çalışan işlemi beklenmedik bir şekilde çıktı veya tanıtıcısını kapatarak bekleyen bir isteği yalnız bıraktı.
Connection_Abandoned_By_ReqQueue Uygulama havuzundan bir çalışan işlemi beklenmedik bir şekilde çıktı veya tanıtıcısını kapatarak bekleyen bir isteği yalnız bıraktı. Windows Vista ve sonraki sürümlerine ve Windows Server 2008 ve sonraki sürümlerine özgü.
Connection_Dropped sunucu son yanıt paketini gönderemeden önce istemci ile sunucu arasındaki bağlantı kapatıldı. Bu davranışın en yaygın nedeni, istemcinin sunucu bağlantısını erken kapatmasıdır.
Connection_Dropped_List_Full İstemciler ve sunucu arasındaki bırakılan bağlantıların listesi dolu. Windows Vista ve sonraki sürümlerine ve Windows Server 2008 ve sonraki sürümlerine özgü.
ConnLimit Hizmet kullanılamıyor hatası oluştu (HTTP hatası 503). Site düzeyi bağlantı sınırına ulaşıldığından veya aşıldığından hizmet kullanılamıyor.
Connections_Refused Çekirdek NonPagedPool belleği 20 MB'ın altına düştü ve http.sys yeni bağlantıları almayı durdurdu
Devre dışı Hizmet kullanılamıyor hatası oluştu (HTTP hatası 503). Bir yönetici uygulamayı çevrimdışına aldığı için hizmet kullanılamıyor.
EntityTooLarge Bir varlık izin verilen boyut üst sınırını aştı.
FieldLength Alan uzunluğu sınırı aşıldı.
Yasak Ayrıştırma sırasında yasak öğe veya dizi karşılandı.
Üstbilgi Üst bilgide ayrıştırma hatası oluştu.
Ana bilgisayar adı Konak adı işlenirken ayrıştırma hatası oluştu.
Dahili Uygulamalar İç sunucu hatası oluştu (HTTP hatası 500).
Invalid_CR/LF Geçersiz bir satır başı veya satır beslemesi oluştu.
LengthRequired Gerekli bir uzunluk değeri eksikti.
Yok Hizmet kullanılamıyor hatası oluştu (HTTP hatası 503). bir iç hata (bellek ayırma hatası veya URL Ayırma Listesi çakışması gibi) oluştuğundan hizmet kullanılamıyor.
Yok/G Bilinmeyen aktarım kodlaması nedeniyle uygulanmayan bir hata (HTTP hatası 501) veya hizmet kullanılamıyor hatası (HTTP hatası 503) oluştu.
Sayı Bir sayı işlenirken ayrıştırma hatası oluştu.
Önkoşul Gerekli bir önkoşul eksikti.
QueueFull Hizmet kullanılamıyor hatası oluştu (HTTP hatası 503). Uygulama isteği kuyruğu dolu olduğundan hizmet kullanılamıyor.
RequestLength İstek uzunluğu sınırı aşıldı.
Timer_AppPool Bir istek, bir sunucu uygulamasının kuyruğa alıp işlemesi için bir uygulama havuzu kuyruğunda çok uzun süre beklediğinden bağlantının süresi doldu. Bu zaman aşımı süresi ConnectionTimeout'tır. Varsayılan olarak, bu değer iki dakika olarak ayarlanır.
Timer_ConnectionIdle Bağlantının süresi doldu ve boşta kalıyor. Varsayılan ConnectionTimeout süresi iki dakikadır.
Timer_EntityBody İstek varlığı gövdesi gelmeden önce bağlantının süresi doldu. bir isteğin açıkça bir varlık gövdesi olduğunda, HTTP API'Timer_EntityBody zamanlayıcısını açar. İlk başta, bu zamanlayıcının sınırı ConnectionTimeout değerine ayarlanır (genellikle iki dakika). Bu istekte başka bir veri göstergesi alındığında, HTTP API'si bağlantıya iki dakika daha (veya ConnectionTimeout'ta belirtilen her şey) vermek için zamanlayıcıyı sıfırlar.
Timer_HeaderWait bir istek için üst bilgi ayrıştırma iki dakikalık varsayılan sınırdan daha uzun sürdüğünden bağlantının süresi doldu.
Timer_MinBytesPerSecond İstemci makul bir hızda yanıt almadığından bağlantının süresi doldu. Yanıt gönderme hızı varsayılan 240 bayt/sn'den daha yavaştı. MinFileBytesPerSec metatabanı özelliğiyle denetlenebilir.
Timer_ReqQueue Bir istek, sunucu uygulamasının kuyruğa alınamayacak kadar uzun süre bir uygulama havuzu kuyruğunda beklediğinden bağlantının süresi doldu. Bu zaman aşımı süresi ConnectionTimeout'tır. Varsayılan olarak, bu değer iki dakika olarak ayarlanır. Windows Vista ve sonraki sürümlerine ve Windows Server 2008 ve sonraki sürümlerine özgü.
Timer_Response Saklı -dır. Şu anda kullanılmıyor.
Timer_SslRenegotiation
İstemci ve sunucu arasındaki Güvenli Yuva Katmanı (SSL) yeniden anlaşması iki dakikalık varsayılan zaman aşımından daha uzun sürdüğünden bağlantının süresi doldu.
URL URL işlenirken ayrıştırma hatası oluştu.
URL_Length URL izin verilen boyut üst sınırını aştı.
Fiil Fiil işlenirken ayrıştırma hatası oluştu.
Version_N/S Sürüm desteklenmeyen bir hata oluştu (HTTP hatası 505).