İleti Günlüğe Kaydetmeyi YapılandırmaConfiguring Message Logging

Bu konu, farklı senaryolar için ileti günlüğe kaydetmeyi nasıl yapılandırabileceğinizi açıklamaktadır.This topic describes how you can configure message logging for different scenarios.

Ileti günlüğe kaydetmeyi etkinleştirmeEnabling Message Logging

Windows Communication Foundation (WCF) varsayılan olarak iletileri günlüğe eklemez.Windows Communication Foundation (WCF) does not log messages by default. İleti günlüğe kaydetmeyi etkinleştirmek için izleme kaynağına bir izleme dinleyicisi eklemeniz System.ServiceModel.MessageLogging ve <messagelogging> yapılandırma dosyasındaki öğenin özniteliklerini ayarlamanız gerekir.To activate message logging, you must add a trace listener to the System.ServiceModel.MessageLogging trace source and set attributes for the <messagelogging> element in the configuration file.

Aşağıdaki örnek, günlüğü nasıl etkinleştireceğinizi ve ek seçenekler belirtmenizi gösterir.The following example shows how to enable logging and specify additional options.

<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üğe kaydetme ayarları hakkında daha fazla bilgi için bkz. izleme ve Ileti günlüğe kaydetme Için önerilen ayarlar.For more information about message logging settings, see Recommended Settings for Tracing and Message Logging.

addKullanmak istediğiniz dinleyicinin adını ve türünü belirtmek için ' i kullanabilirsiniz.You can use add to specify the name and type of the listener you want to use. Örnek yapılandırmada, dinleyici "Messages" olarak adlandırılır ve standart .NET Framework İzleme dinleyicisini ( System.Diagnostics.XmlWriterTraceListener ) kullanılacak tür olarak ekler.In the example configuration, the Listener is named "messages" and adds the standard .NET Framework trace listener (System.Diagnostics.XmlWriterTraceListener) as the type to use. Kullanıyorsanız System.Diagnostics.XmlWriterTraceListener , yapılandırma dosyasında çıkış dosyasının konumunu ve adını belirtmeniz gerekir.If you use System.Diagnostics.XmlWriterTraceListener, you must specify the output file location and name in the configuration file. Bu, initializeData günlük dosyasının adı ayarlanarak yapılır.This is done by setting initializeData to the name of the log file. Aksi takdirde, sistem bir özel durum oluşturur.Otherwise, the system throws an exception. Günlükleri varsayılan bir dosyaya yayan özel bir dinleyici da uygulayabilirsiniz.You can also implement a custom listener that emits logs to a default file.

Not

İleti günlüğe kaydetme disk alanına eriştiği için belirli bir hizmet için diske yazılan ileti sayısını sınırlamanız gerekir.Because message logging accesses disk space, you should limit the number of messages that are written to disk for a particular service. İleti sınırına ulaşıldığında, bilgi düzeyindeki bir izleme oluşturulur ve tüm ileti günlüğü etkinlikleri durur.When the message limit is reached, a trace at the Information level is produced and all message logging activities stop.

Günlüğe kaydetme düzeyi ve ek seçenekler, günlük düzeyi ve seçenekler bölümünde ele alınmıştır.The logging level, as well as the additional options, are discussed in the Logging Level and Options section.

switchValueÖğesinin özniteliği source yalnızca izleme için geçerlidir.The switchValue attribute of a source is only valid for tracing. switchValue System.ServiceModel.MessageLogging İzleme kaynağı için aşağıdaki gibi bir öznitelik belirtirseniz, hiçbir etkisi olmaz.If you specify a switchValue attribute for the System.ServiceModel.MessageLogging trace source as follows, it has no effect.

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

İzleme kaynağını devre dışı bırakmak istiyorsanız, logMessagesAtServiceLevel logMalformedMessages logMessagesAtTransportLevel bunun yerine öğesinin, ve özniteliklerini kullanmanız gerekir messageLogging .If you want to disable the trace source, you should use the logMessagesAtServiceLevel, logMalformedMessages, and logMessagesAtTransportLevel attributes of the messageLogging element instead. Tüm bu öznitelikleri olarak ayarlamanız gerekir false .You should set all these attributes to false. Bu, önceki kod örnekteki yapılandırma dosyası kullanılarak, yapılandırma Düzenleyicisi Kullanıcı arabirimi arabiriminden veya WMI kullanılarak yapılabilir.This can be done by using the configuration file in the previous code example, through the Configuration Editor UI interface, or using WMI. Yapılandırma Düzenleyicisi aracı hakkında daha fazla bilgi için bkz. yapılandırma Düzenleyicisi aracı (SvcConfigEditor.exe).For more information about the Configuration Editor tool, see Configuration Editor Tool (SvcConfigEditor.exe). WMI hakkında daha fazla bilgi için bkz. Tanılama için Windows Yönetim araçları kullanma.For more information about WMI, see Using Windows Management Instrumentation for Diagnostics.

Günlük düzeyleri ve SeçeneklerLogging Levels and Options

Gelen iletilerde, ileti oluşturulduktan hemen sonra ileti, hizmet düzeyindeki Kullanıcı koduna girmeden ve hatalı biçimlendirilmiş iletiler algılandığında anında gerçekleşir.For incoming messages, logging happens immediately after the message is formed, immediately before the message gets to user code in the service level, and when malformed messages are detected.

Giden iletiler için günlüğe kaydetme, ileti, kullanıcı kodundan ayrıldıktan hemen sonra ve ileti kablodan geçmeden hemen önce gerçekleşir.For outgoing messages, logging happens immediately after the message leaves user code and immediately before the message goes on the wire.

WCF, iletileri iki farklı düzeyde, hizmette ve aktarımda günlüğe kaydeder.WCF logs messages at two different levels, service and transport. Hatalı biçimlendirilmiş iletiler de günlüğe kaydedilir.Malformed messages are also logged. Üç kategori birbirinden bağımsızdır ve yapılandırmada ayrı olarak etkinleştirilebilir.The three categories are independent from each other and can be activated separately in configuration.

logMessagesAtServiceLevel logMalformedMessages Öğesinin, ve özniteliklerini ayarlayarak günlüğe kaydetme düzeyini kontrol edebilirsiniz logMessagesAtTransportLevel messageLogging .You can control the logging level by setting the logMessagesAtServiceLevel, logMalformedMessages, and logMessagesAtTransportLevel attributes of the messageLogging element.

Hizmet düzeyiService Level

Bu katmanda günlüğe kaydedilen iletiler, Kullanıcı kodu girmek için (alma sırasında) veya ayrılmaya (gönderme sırasında).Messages logged at this layer are about to enter (on receiving) or leave (on sending) user code. Filtreler tanımlanmışsa, yalnızca filtrelerle eşleşen iletiler günlüğe kaydedilir.If filters have been defined, only messages that match the filters are logged. Aksi takdirde, hizmet düzeyindeki tüm iletiler günlüğe kaydedilir.Otherwise, all messages at the service level are logged. Altyapı iletileri (işlemler, eş kanal ve güvenlik), güvenilir mesajlaşma iletileri dışında bu düzeyde de günlüğe kaydedilir.Infrastructure messages (transactions, peer channel, and security) are also logged at this level, except for Reliable Messaging messages. Akışlı iletilerde yalnızca üstbilgiler günlüğe kaydedilir.On streamed messages, only the headers are logged. Ayrıca, güvenli iletilerin şifresi bu düzeyde çözülür.In addition, secure messages are logged decrypted at this level.

Aktarım düzeyiTransport Level

Bu katmanda günlüğe kaydedilen iletiler, hattaki taşıma için veya sonrasında kodlanacak veya kodu çözülecek şekilde hazırlanmaya yöneliktir.Messages logged at this layer are ready to be encoded or decoded for or after transportation on the wire. Filtreler tanımlanmışsa, yalnızca filtrelerle eşleşen iletiler günlüğe kaydedilir.If filters have been defined, only messages that match the filters are logged. Aksi halde, aktarım katmanındaki tüm iletiler günlüğe kaydedilir.Otherwise, all messages at the transport layer are logged. Tüm altyapı iletileri, güvenilir mesajlaşma iletileri de dahil olmak üzere bu katmanda günlüğe kaydedilir.All infrastructure messages are logged at this layer, including reliable messaging messages. Akışlı iletilerde yalnızca üstbilgiler günlüğe kaydedilir.On streamed messages, only the headers are logged. Ayrıca, HTTPS gibi güvenli bir aktarım kullanılması dışında, güvenli iletiler bu düzeyde şifreli olarak kaydedilir.In addition, secure messages are logged as encrypted at this level, except if a secure transport such as HTTPS is used.

Hatalı biçimlendirilmiş düzeyMalformed Level

Hatalı biçimlendirilmiş iletiler, herhangi bir işleme aşamasında WCF yığını tarafından reddedilen iletilerdir.Malformed messages are messages that are rejected by the WCF stack at any stage of processing. Hatalı biçimlendirilmiş iletiler, olarak kaydedilir: Bu durumda, uygun olmayan XML ile, vb. için şifrelenir.Malformed messages are logged as-is: encrypted if they are so, with non-proper XML, and so on. maxSizeOfMessageToLogCDATA olarak günlüğe kaydedilecek iletinin boyutu tanımlanır.maxSizeOfMessageToLog defined the size of the message to be logged as CDATA. Varsayılan olarak, maxSizeOfMessageToLog 256k ' e eşittir.By default, maxSizeOfMessageToLog is equal to 256K. Bu öznitelik hakkında daha fazla bilgi için diğer seçenekler bölümüne bakın.For more information about this attribute, see the Other Options section.

Diğer seçeneklerOther Options

Kullanıcı, günlük düzeylerine ek olarak aşağıdaki seçenekleri belirtebilir:In addition to the logging levels, the user can specify the following options:

  • Tüm Iletiyi Kaydet ( logEntireMessage öznitelik): Bu değer, iletinin tamamının (ileti üst bilgisi ve gövdesi) günlüğe kaydedilip kaydedilmeyeceğini belirtir.Log Entire Message (logEntireMessage attribute): This value specifies whether the entire message (message header and body) is logged. Varsayılan değer, false yani yalnızca üstbilginin günlüğe kaydedildiği anlamına gelir.The default value is false, meaning that only the header is logged. Bu ayar, hizmet ve aktarım iletisi günlük düzeylerini etkiler.This setting affects service and transport message logging levels..

  • Günlüğe kaydedilecek en fazla ileti ( maxMessagesToLog öznitelik): Bu değer günlüğe kaydedilecek en fazla ileti sayısını belirtir.Max messages to log (maxMessagesToLog attribute): This value specifies the maximum number of messages to log. Tüm iletiler (hizmet, aktarım ve hatalı biçimlendirilmiş iletiler) bu kotanın altında sayılır.All messages (service, transport, and malformed messages) are counted towards this quota. Kotaya ulaşıldığında, bir izleme yayınlanır ve başka bir ileti günlüğe kaydedilmez.When the quota is reached, a trace is emitted and no additional message is logged. Varsayılan değer 10000 ' dir.The default value is 10000.

  • Günlüğe kaydedilecek iletinin en büyük boyutu ( maxSizeOfMessageToLog öznitelik): Bu değer, bayt cinsinden oturum açmak için en fazla ileti boyutunu belirtir.Max size of message to log (maxSizeOfMessageToLog attribute): This value specifies the maximum size of messages to log in bytes. Boyut sınırını aşan iletiler günlüğe kaydedilmez ve bu ileti için başka bir etkinlik gerçekleştirilmez.Messages that exceed the size limit are not logged, and no other activity is performed for that message. Bu ayar tüm izleme düzeylerini etkiler.This setting affects all trace levels. ServiceModel izleme açık ise, kullanıcıya bildirimde bulunan ilk günlük noktasında (ServiceModelSend * veya TransportReceive) bir uyarı düzeyi izleme yayınlanır.If ServiceModel tracing is on, a Warning level trace is emitted at the first logging point (ServiceModelSend* or TransportReceive) to notify the user. Hizmet düzeyi ve aktarım düzeyi iletileri için varsayılan değer 256K, ancak hatalı biçimlendirilmiş iletiler için varsayılan değer 4K olur.The default value for service level and transport level messages is 256K, while the default value for malformed messages is 4K.

    Dikkat

    Karşılaştırma için hesaplanan ileti boyutu, maxSizeOfMessageToLog Serileştirmeden önce bellekteki ileti boyutudur.The message size that is computed to compare against maxSizeOfMessageToLog is the message size in memory before serialization. Bu boyut, günlüğe kaydedilen ileti dizesinin gerçek uzunluğundan farklı olabilir ve birçok durumda gerçek boyuttan daha büyük olur.This size can differ from the actual length of the message string that is being logged, and in many occasions is bigger than the actual size. Sonuç olarak, iletiler günlüğe kaydedilmez.As a result, messages may not be logged. Bu olguyu, maxSizeOfMessageToLog beklenen ileti boyutundan %10 daha büyük olacak özniteliği belirterek yapabilirsiniz.You can account for this fact by specifying the maxSizeOfMessageToLog attribute to be 10% larger than the expected message size. Ayrıca, hatalı biçimlendirilmiş iletiler günlüğe kaydedilir, ileti günlükleri tarafından kullanılan gerçek disk alanı, tarafından belirtilen değerin boyutunun 5 katı olabilir maxSizeOfMessageToLog .In addition, if malformed messages are logged, the actual disk space utilized by the message logs can be up to 5 times the size of the value specified by maxSizeOfMessageToLog.

Yapılandırma dosyasında bir izleme dinleyicisi tanımlanmazsa, belirtilen günlüğe kaydetme düzeyinden bağımsız olarak günlüğe kaydetme çıkışı oluşturulmaz.If no trace listener is defined in the configuration file, no logging output is generated regardless of the specified logging level.

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.Message logging options, such as the attributes described in this section, can be changed at runtime using Windows Management Instrumentation (WMI). Bu, bu Boole özelliklerini sunan AppDomainInfo örneğine erişerek yapılabilir: LogMessagesAtServiceLevel , LogMessagesAtTransportLevel ve LogMalformedMessages .This can be done by accessing the AppDomainInfo instance, which exposes these Boolean properties: LogMessagesAtServiceLevel, LogMessagesAtTransportLevel, and LogMalformedMessages. Bu nedenle, ileti günlüğe kaydetme için bir izleme dinleyicisi yapılandırırsanız, ancak bu seçenekleri false yapılandırma bölümünde ayarlarsanız, daha sonra true uygulamanın çalıştığı zaman olarak değiştirebilirsiniz.Therefore, if you configure a trace listener for message logging, but set these options to false in configuration, you can later change them to true when the application is running. Bu, çalışma zamanında ileti günlüğe kaydetmeyi etkili bir şekilde sunar.This effectively enables message logging at runtime. Benzer şekilde, yapılandırma dosyanızda ileti günlüğünü etkinleştirirseniz, WMI kullanarak çalışma zamanında devre dışı bırakabilirsiniz.Similarly, if you enable message logging in your configuration file, you can disable it at runtime using WMI. Daha fazla bilgi için bkz. Tanılama için Windows Yönetim araçları kullanma.For more information, see Using Windows Management Instrumentation for Diagnostics.

sourceİleti günlüğündeki alan, iletinin hangi bağlamda günlüğe kaydedileceğini belirtir: istek iletisi gönderirken/alırken, istek-yanıt veya 1 yönlü istek, hizmet modeli veya aktarım katmanında veya hatalı biçimlendirilmiş bir ileti durumunda.The source field in a message log specifies in which context the message is logged: when sending/receiving a request message, for a request-reply or 1-way request, at service model or transport layer, or in the case of a malformed message.

Hatalı biçimlendirilmiş iletilerde source eşittir Malformed .For malformed messages, source is equal to Malformed. Aksi takdirde, kaynak, bağlamı temel alarak aşağıdaki değerlere sahiptir.Otherwise, source has the following values based on the context.

Istek/yanıt içinFor Request/Reply

Istek gönderSend Request Istek alReceive Request Yanıt gönderSend Reply Yanıt alReceive Reply
Hizmet modeli katmanıService Model layer HizmetService

DüzeyLevel

GönderSend

İstekRequest
HizmetService

DüzeyLevel

AlReceive

İstekRequest
HizmetService

DüzeyLevel

GönderSend

YanıtlaReply
HizmetService

DüzeyLevel

AlReceive

YanıtlaReply
Aktarım katmanıTransport layer AktarımTransport

GönderSend
AktarımTransport

AlReceive
AktarımTransport

GönderSend
AktarımTransport

AlReceive

Tek yönlü Istek içinFor One-way Request

Istek gönderSend Request Istek alReceive Request
Hizmet modeli katmanıService Model layer HizmetService

DüzeyLevel

GönderSend

InınDatagram
HizmetService

DüzeyLevel

AlReceive

InınDatagram
Aktarım katmanıTransport layer AktarımTransport

GönderSend
AktarımTransport

AlReceive

İleti FiltreleriMessage Filters

İleti filtreleri messageLogging yapılandırma bölümünün yapılandırma öğesinde tanımlanmıştır diagnostics .Message filters are defined in the messageLogging configuration element of the diagnostics configuration section. Bunlar hizmet ve Aktarım düzeyinde uygulanır.They are applied at the service and transport level. Bir veya daha fazla filtre tanımlandığında yalnızca filtrelerden en az biriyle eşleşen mesajlar günlüğe kaydedilir.When one or more filters are defined, only messages that match at least one of the filters are logged. Hiçbir filtre tanımlanmamışsa, tüm iletiler geçer.If no filter is defined, all messages pass through.

Filtreler tam XPath söz dizimini destekler ve yapılandırma dosyasında göründükleri sırada uygulanır.Filters support the full XPath syntax and are applied in the order they appear in the configuration file. Sözdizimi yanlış bir filtre, yapılandırma özel durumuyla sonuçlanır.A syntactically incorrect filter results in a configuration exception.

Filtreler ayrıca, nodeQuota XPath Dom içindeki filtreyle eşleşecek şekilde incelenebilir maksimum düğüm sayısını sınırlayan özniteliği kullanarak bir güvenlik özelliği de sağlar.Filters also provide a safety feature using the nodeQuota attribute, which limits the maximum number of nodes in the XPath DOM that can be examined to match the filter.

Aşağıdaki örnek, yalnızca bir SOAP üstbilgisi bölümüne sahip iletileri kaydeden bir filtrenin nasıl yapılandırılacağını gösterir.The following example shows how to configure a filter that records only messages that have a SOAP header section.

<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 bir iletinin gövdesine uygulanamaz.Filters cannot be applied to the body of a message. Bir iletinin gövdesini işlemeyi deneyen filtreler, filtreler listesinden kaldırılır.Filters that attempt to manipulate the body of a message are removed from the list of filters. Bunu belirten bir olay da yayılır.An event is also emitted that indicates this. Örneğin, aşağıdaki filtre filtre tablosundan kaldırılacak.For example, the following filter would be removed from the filter table.

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

Özel bir dinleyici yapılandırmaConfiguring a Custom Listener

Ayrıca, ek seçeneklerle özel bir dinleyici de yapılandırabilirsiniz.You can also configure a custom listener with additional options. Özel bir dinleyici, günlüğe kaydedilmeden önce iletilerden uygulamaya özgü PII öğelerini filtrelemede yararlı olabilir.A custom listener can be useful in filtering application-specific PII elements from messages before logging. Aşağıdaki örnek, özel bir dinleyici yapılandırmasını gösterir.The following example demonstrates a custom listener configuration.

<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ğin, türün nitelenmiş derleme adına ayarlanması gerektiğini bilmelisiniz.You should be aware that the type attribute should be set to a qualified assembly name of the type.

Ayrıca bkz.See also