İ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 switchValue
source
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
, logMalformedMessages
ve logMessagesAtTransportLevel
özniteliklerini messageLogging
kullanmanız gerekir. Tüm bu öznitelikleri olarak false
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ı.
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 , logMalformedMessages
ve logMessagesAtTransportLevel
özniteliklerini messageLogging
ayarlayarak logMessagesAtServiceLevel
gü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 olurfalse
, 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 boyutundanmaxSizeOfMessageToLog
%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ındanmaxSizeOfMessageToLog
belirtilen 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
, LogMessagesAtTransportLevel
ve 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 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 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.