Aracılığıyla paylaş


İleti Günlüğe Kaydetmeyi Yapılandırma

Bu konuda, farklı senaryolar için ileti günlüğünü nasıl yapılandırabileceğiniz açıklanmaktadır.

İleti Günlüğünü Etkinleştirme

Windows Communication Foundation (WCF), iletileri varsayılan olarak günlüğe kaydetmez. İleti günlüğünü etkinleştirmek için, izleme kaynağına bir izleme dinleyicisi System.ServiceModel.MessageLogging eklemeniz ve yapılandırma dosyasındaki <messagelogging> öğenin özniteliklerini ayarlamanız gerekir.

Aşağıdaki örnek, günlüğe kaydetmeyi etkinleştirmeyi ve ek seçenekleri belirtmeyi gösterir.

<system.diagnostics>
  <sources>
    <source name="System.ServiceModel.MessageLogging">
      <listeners>
         <add name="messages"
              type="System.Diagnostics.XmlWriterTraceListener"
              initializeData="c:\logs\messages.svclog" />
        </listeners>
    </source>
  </sources>
</system.diagnostics>

<system.serviceModel>
  <diagnostics>
    <messageLogging
         logEntireMessage="true"
         logMalformedMessages="false"
         logMessagesAtServiceLevel="true"
         logMessagesAtTransportLevel="false"
         maxMessagesToLog="3000"
         maxSizeOfMessageToLog="2000"/>
  </diagnostics>
</system.serviceModel>

İleti günlüğü ayarları hakkında daha fazla bilgi için bkz. İzleme ve İleti Günlüğü için Önerilen Ayarlar.

Kullanmak istediğiniz dinleyicinin adını ve türünü belirtmek için kullanabilirsiniz add . Örnek yapılandırmada Dinleyici "messages" olarak adlandırılır ve standart .NET Framework izleme dinleyicisini (System.Diagnostics.XmlWriterTraceListener) kullanılacak tür olarak ekler. kullanıyorsanız System.Diagnostics.XmlWriterTraceListener, yapılandırma dosyasında çıkış dosyasının konumunu ve adını belirtmeniz gerekir. Bu işlem, günlük dosyasının adına ayarlanarak initializeData yapılır. Aksi takdirde, sistem bir özel durum oluşturur. Günlükleri varsayılan bir dosyaya yayan özel bir dinleyici de uygulayabilirsiniz.

Not

İleti günlüğü disk alanına eriştiğinden, belirli bir hizmet için diske yazılan ileti sayısını sınırlamanız gerekir. İleti sınırına ulaşıldığında, Bilgi düzeyinde bir izleme oluşturulur ve tüm ileti günlüğü etkinlikleri durur.

Günlük düzeyi ve ek seçenekler Günlük Düzeyi ve Seçenekler bölümünde ele alınmaktadır.

özniteliği switchValuesource yalnızca izleme için geçerlidir. İzleme kaynağı için System.ServiceModel.MessageLogging aşağıdaki gibi bir switchValue öznitelik belirtirseniz, bunun hiçbir etkisi olmaz.

<source name="System.ServiceModel.MessageLogging" switchValue="Verbose">
</source>

İzleme kaynağını devre dışı bırakmak istiyorsanız, bunun yerine öğesinin logMessagesAtServiceLevel, logMalformedMessagesve logMessagesAtTransportLevel özniteliklerini messageLogging kullanmanız gerekir. Tüm bu öznitelikleri olarak falseayarlamalısınız. Bu, önceki kod örneğindeki yapılandırma dosyası kullanılarak, Yapılandırma Düzenleyicisi kullanıcı arabirimi aracılığıyla veya WMI kullanılarak yapılabilir. Yapılandırma Düzenleyicisi aracı hakkında daha fazla bilgi için bkz. Yapılandırma Düzenleyicisi Aracı (SvcConfigEditor.exe). WMI hakkında daha fazla bilgi için bkz . Tanılama için Windows Yönetim Araçları'nın kullanılması.

Günlük Düzeyleri ve Seçenekleri

Gelen iletiler için günlük kaydı, ileti oluşturulduktan hemen sonra, ileti hizmet düzeyinde kullanıcı koduna geçmeden hemen önce ve hatalı biçimlendirilmiş iletiler algılandığında gerçekleşir.

Giden iletiler için günlüğe kaydetme işlemi, ileti kullanıcı kodundan ayrıldıktan hemen sonra ve ileti kabloya geçmeden hemen önce gerçekleşir.

WCF, iletileri hizmet ve aktarım olarak iki farklı düzeyde günlüğe kaydeder. Hatalı biçimlendirilmiş iletiler de günlüğe kaydedilir. Üç kategori birbirinden bağımsızdır ve yapılandırmada ayrı olarak etkinleştirilebilir.

öğesinin , logMalformedMessagesve logMessagesAtTransportLevel özniteliklerini messageLogging ayarlayarak logMessagesAtServiceLevelgünlük düzeyini denetleyebilirsiniz.

Hizmet Düzeyi

Bu katmanda günlüğe kaydedilen iletiler kullanıcı kodunu girmek (alırken) veya bırakmak (gönderilirken) üzeredir. Filtreler tanımlanmışsa, yalnızca filtrelerle eşleşen iletiler günlüğe kaydedilir. Aksi takdirde, hizmet düzeyindeki tüm iletiler günlüğe kaydedilir. Güvenilir Mesajlaşma iletileri dışında altyapı iletileri (işlemler, eş kanal ve güvenlik) de bu düzeyde günlüğe kaydedilir. Akışlı iletilerde yalnızca üst bilgiler günlüğe kaydedilir. Ayrıca, güvenli iletilerin şifresi bu düzeyde günlüğe kaydedilir.

Aktarım Düzeyi

Bu katmanda günlüğe kaydedilen iletiler, kablo üzerinde taşıma için veya sonrasında kodlanabilir veya çözülebilir. Filtreler tanımlanmışsa, yalnızca filtrelerle eşleşen iletiler günlüğe kaydedilir. Aksi takdirde, aktarım katmanındaki tüm iletiler günlüğe kaydedilir. Güvenilir mesajlaşma iletileri de dahil olmak üzere tüm altyapı iletileri bu katmanda günlüğe kaydedilir. Akışlı iletilerde yalnızca üst bilgiler günlüğe kaydedilir. Ayrıca, HTTPS gibi güvenli bir aktarım kullanılıyorsa, güvenli iletiler bu düzeyde şifrelenmiş olarak günlüğe kaydedilir.

Yanlış Biçimlendirilmiş Düzey

Yanlış biçimlendirilmiş iletiler, işlemenin herhangi bir aşamasında WCF yığını tarafından reddedilen iletilerdir. Hatalı biçimlendirilmiş iletiler olduğu gibi günlüğe kaydedilir: böyleyse, düzgün olmayan XML ile vb. şifrelenir. maxSizeOfMessageToLog CDATA olarak günlüğe kaydedilecek iletinin boyutunu tanımladı. Varsayılan olarak, maxSizeOfMessageToLog 256K'ya eşittir. Bu öznitelik hakkında daha fazla bilgi için Diğer Seçenekler bölümüne bakın.

Diğer Seçenekler

Kullanıcı, günlük düzeylerine ek olarak aşağıdaki seçenekleri belirtebilir:

  • İletinin Tamamını Günlüğe Kaydet (logEntireMessage öznitelik): Bu değer, iletinin tamamının (ileti üst bilgisi ve gövdesi) günlüğe kaydedilip kaydedilmediğini belirtir. Varsayılan değer olur false, yani yalnızca üst bilgi günlüğe kaydedilir. Bu ayar hizmet ve aktarım iletisi günlük düzeylerini etkiler...

  • Günlüğe kaydedilecek en fazla ileti (maxMessagesToLog öznitelik): Bu değer, günlüğe kaydedilecek en fazla ileti sayısını belirtir. Tüm iletiler (hizmet, aktarım ve yanlış biçimlendirilmiş iletiler) bu kotaya göre sayılır. Kotaya ulaşıldığında bir izleme gönderilir ve günlüğe ek ileti kaydedilmez. Varsayılan değer 10000'dir.

  • Günlüğe kaydedilecek iletinin en büyük boyutu (maxSizeOfMessageToLog öznitelik): Bu değer, bayt cinsinden oturum açmak için ileti boyutu üst sınırını belirtir. Boyut sınırını aşan iletiler günlüğe kaydedilmez ve bu ileti için başka etkinlik gerçekleştirilmez. Bu ayar tüm izleme düzeylerini etkiler. ServiceModel izleme açıksa, kullanıcıya bildirmek için ilk günlük noktasına (ServiceModelSend* veya TransportReceive) bir Uyarı düzeyi izlemesi gönderilir. Hizmet düzeyi ve aktarım düzeyi iletileri için varsayılan değer 256K, hatalı biçimlendirilmiş iletiler için varsayılan değer ise 4K'dır.

    Dikkat

    Karşılaştırmak maxSizeOfMessageToLog için hesaplanan ileti boyutu, serileştirmeden önce bellekteki ileti boyutudur. Bu boyut, günlüğe kaydedilen ileti dizesinin gerçek uzunluğundan farklı olabilir ve birçok durumda gerçek boyuttan daha büyüktür. Sonuç olarak, iletiler günlüğe kaydedilmeyebilir. Özniteliğin beklenen ileti boyutundan maxSizeOfMessageToLog %10 daha büyük olmasını belirterek bu olguyu hesaba katabilirsiniz. Ayrıca, hatalı biçimlendirilmiş iletiler günlüğe kaydedilirse, ileti günlükleri tarafından kullanılan gerçek disk alanı tarafından maxSizeOfMessageToLogbelirtilen değerin 5 katına kadar olabilir.

Yapılandırma dosyasında hiçbir izleme dinleyicisi tanımlanmamışsa, belirtilen günlük düzeyinden bağımsız olarak günlüğe kaydetme çıkışı oluşturulmaz.

Bu bölümde açıklanan öznitelikler gibi ileti günlüğü seçenekleri, Windows Yönetim Araçları (WMI) kullanılarak çalışma zamanında değiştirilebilir. Bu, şu Boole özelliklerini kullanıma sunan AppDomainInfo örneğine erişilerek yapılabilir: LogMessagesAtServiceLevel, LogMessagesAtTransportLevelve LogMalformedMessages. Bu nedenle, ileti günlüğü için bir izleme dinleyicisi yapılandırırken bu seçenekleri false yapılandırmada olarak ayarlarsanız, daha sonra uygulama çalışırken olarak true değiştirebilirsiniz. Bu, çalışma zamanında ileti günlüğünü etkili bir şekilde etkinleştirir. Benzer şekilde, yapılandırma dosyanızda ileti günlüğünü etkinleştirirseniz WMI kullanarak çalışma zamanında devre dışı bırakabilirsiniz. Daha fazla bilgi için bkz . Tanılama için Windows Yönetim Araçları kullanma.

source İleti günlüğündeki alan, iletinin hangi bağlamda günlüğe kaydedildiği belirtir: bir istek iletisi gönderirken/alırken, istek yanıtı veya 1 yönlü istek için, hizmet modelinde veya aktarım katmanında ya da hatalı biçimlendirilmiş bir ileti söz konusu olduğunda.

Hatalı biçimlendirilmiş iletiler source için eşittir Malformed. Aksi takdirde, kaynak bağlama göre aşağıdaki değerlere sahiptir.

İstek/Yanıt için:

Katman İstek Gönder Alma İsteği Yanıt Gönder Yanıt Al
Hizmet Modeli katmanı Hizmet

Level

Gönder

İstek
Hizmet

Level

Al

İstek
Hizmet

Level

Gönder

Yanıt
Hizmet

Level

Al

Yanıt
Taşıma katmanı Taşıma

Gönder
Taşıma

Al
Taşıma

Gönder
Taşıma

Al

Tek Yönlü İstek için:

Katman İstek Gönder Alma İsteği
Hizmet Modeli katmanı Hizmet

Level

Gönder

Datagram
Hizmet

Level

Al

Datagram
Taşıma katmanı Taşıma

Gönder
Taşıma

Al

İleti Filtreleri

İleti filtreleri yapılandırma bölümünün yapılandırma öğesinde messageLoggingdiagnostics tanımlanır. Bunlar hizmet ve taşıma düzeyinde uygulanır. Bir veya daha fazla filtre tanımlandığında, yalnızca filtrelerden en az biriyle eşleşen iletiler günlüğe kaydedilir. Hiçbir filtre tanımlanmamışsa, tüm iletiler geçer.

Filtreler tam XPath söz dizimini destekler ve yapılandırma dosyasında göründükleri sırayla uygulanır. Dizimsel olarak yanlış bir filtre yapılandırma özel durumuyla sonuçlanır.

Filtreler ayrıca özniteliğini nodeQuota kullanarak bir güvenlik özelliği de sağlar. Bu özellik, XPath DOM'daki filtreyle eşleşecek şekilde incelenebilen en fazla düğüm sayısını sınırlar.

Aşağıdaki örnek, yalnızca SOAP üst bilgisi bölümüne sahip iletileri kaydeden bir filtrenin nasıl yapılandırıldığını gösterir.

<messageLogging logEntireMessage="true"
    logMalformedMessages="true"
    logMessagesAtServiceLevel="true"
    logMessagesAtTransportLevel="true"
    maxMessagesToLog="420">
    <filters>
        <add nodeQuota="10" xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
                 /soap:Envelope/soap:Header
        </add>
     </filters>
</messageLogging>

Filtreler iletinin gövdesine uygulanamaz. İletinin gövdesini işlemeye çalışan filtreler, filtre listesinden kaldırılır. Bunu gösteren bir olay da gönderilir. Örneğin, aşağıdaki filtre filtre tablosundan kaldırılır.

<add xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">/s:Envelope/s:Body[contains(text(), "Hello")]</add>

Özel Dinleyici Yapılandırma

Ek seçeneklerle özel bir dinleyici de yapılandırabilirsiniz. Özel dinleyici, günlüğe kaydetmeden önce iletilerden uygulamaya özgü PII öğelerini filtrelemede yararlı olabilir. Aşağıdaki örnekte özel dinleyici yapılandırması gösterilmektedir.

<system.diagnostics>
   <sources>
     <source name="System.ServiceModel.MessageLogging">
           <listeners>
             <add name="MyListener"
                    type="YourCustomListener"
                    initializeData="c:\logs\messages.svclog"
                    maxDiskSpace="1000"/>
           </listeners>
     </source>
   </sources>
</system.diagnostics>

Özniteliğin türüne type uygun bir derleme adına ayarlanması gerektiğini unutmayın.

Ayrıca bkz.