Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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, initializeData
günlük dosyasının adına ayarlayarak yapılır. Aksi takdirde, sistem bir istisna fırlatır. Günlükleri varsayılan bir dosyaya yayan özel bir dinleyici de uygulayabilirsiniz.
Uyarı
İ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.
Kaydetme düzeyi ve ek seçenekler, Kaydetme Düzeyi ve Seçenekler bölümünde ele alınmaktadır.
switchValue
özniteliği bir source
yalnızca izleme için geçerlidir.
switchValue
izleme kaynağı için aşağıdaki gibi bir System.ServiceModel.MessageLogging
ö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
, logMalformedMessages
ve logMessagesAtTransportLevel
özniteliklerini messageLogging
kullanmanız gerekir. Tüm bu öznitelikleri false
olarak ayarlamalı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ı.
Loglama 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 gönderilmeden 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.
logMessagesAtServiceLevel
öğesinin logMalformedMessages
, logMessagesAtTransportLevel
ve messageLogging
özniteliklerini ayarlayarak günlük kayıt 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 başlıklar günlüğe kaydedilir. Ayrıca, güvenli iletiler bu düzeyde şifresi çözüldükten sonra günlüğe kaydedilir.
Taşıma Katmanı
Bu katmanda günlüğe kaydedilen iletiler, hat üzerinden taşıma için veya sonrasında kodlanmaya veya çözülmeye hazırdır. Filtreler tanımlanmışsa, yalnızca filtrelerle eşleşen iletiler günlüğe kaydedilir. Diğer durumda, 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 başlıklar günlüğe kaydedilir. Ayrıca, HTTPS gibi güvenli bir aktarım kullanılmadığı takdirde, 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. Yanlış biçimlendirilmiş iletiler as-isgü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ğerfalse
'dir, yani yalnızca üst bilgi günlüğe kaydedilir. Bu ayar, hizmet ve taşıma mesajı kayıt seviyelerini 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 mesajın en büyük boyutu (
maxSizeOfMessageToLog
öznitelik): Bu değer, bayt cinsinden günlüğe kaydedilecek mesajların boyut ü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 amacıyla ilk loglama noktasında (ServiceModelSend* veya TransportReceive) bir Uyarı düzeyi iz kaydı oluşturulur. 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
Bellekte serileştirmeden önce hesaplanan ileti boyutu,
maxSizeOfMessageToLog
ile karşılaştırılan 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, iletilerin günlüğe kaydedilmesi mümkün olmayabilir. Özniteliğin beklenen ileti boyutundanmaxSizeOfMessageToLog
10% daha büyük olmasını belirterek bu gerçeği 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ındanmaxSizeOfMessageToLog
belirtilen değerin 5 katına kadar olabilir.
Yapılandırma dosyasında hiçbir izleme dinleyicisi tanımlanmamışsa, hangi günlük düzeyi belirtilmiş olursa olsun, günlük çıktısı 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
, LogMessagesAtTransportLevel
ve LogMalformedMessages
. Bu nedenle, ileti günlüğü için bir izleme dinleyicisi yapılandırırken, bu seçenekleri yapılandırmada false
olarak ayarlarsanız, daha sonra uygulama çalışırken true
olarak 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 için, source
Malformed
'ya eşittir. 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 Seviye Gönder İstek |
Hizmet Seviye Alın İstek |
Hizmet Seviye Gönder Yanıt |
Hizmet Seviye Alın Yanıt |
Taşıma katmanı | Taşıma Gönder |
Taşıma Alın |
Taşıma Gönder |
Taşıma Alın |
Tek Yönlü İstek için:
Katman | İstek Gönder | Alma İsteği |
---|---|---|
Hizmet Modeli katmanı | Hizmet Seviye Gönder Datagram |
Hizmet Seviye Alın Datagram |
Taşıma katmanı | Taşıma Gönder |
Taşıma Alın |
İleti Filtreleri
İleti filtreleri yapılandırma bölümünün yapılandırma öğesinde messageLogging
diagnostics
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 yayımlanır. Ö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>
type
özniteliğinin, türün nitelikli bir derleme adına ayarlanması gerektiğini bilmelisiniz.