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). |
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin