.NET için istemci kitaplığıyla istemci tarafı günlüğe kaydetme

.NET için Azure Depolama istemci kitaplığı (sürüm 2.1 ve üzeri) ile standart .NET tanılama altyapısını kullanarak .NET istemci uygulamanızın içinden Azure Depolama isteklerini günlüğe kaydedebilirsiniz. Bu şekilde, istemcinizin Azure Depolama hizmetlerine gönderdiği isteklerin ayrıntılarını ve aldığı yanıtları görebilirsiniz.

Azure Depolama istemci kitaplığı, hangi depolama isteklerini günlüğe kaydedebileceğinizi denetlemenizi sağlar ve .NET tanılama altyapısı da günlük verileri üzerinde tam denetim sağlar( örneğin, bunları nereye göndereceğiniz). Örneğin, günlük verilerini işlenmek üzere bir dosyaya veya uygulamaya göndermeyi seçebilirsiniz. Azure Depolama Analizi ve ağ izleme ile birlikte, uygulamanızın Azure Depolama hizmetleriyle nasıl etkileşime geçtiğini ayrıntılı bir şekilde görüntülemek için istemci kitaplığı günlüğünü kullanabilirsiniz. Daha fazla bilgi için bkz. Azure Depolama'yı izleme, tanılama ve sorunlarını giderme.

İstemci kitaplığı günlüğünü etkinleştirme

Aşağıdaki örnekte, depolama günlüğü iletilerini bir metin dosyasında toplamak ve kalıcı hale getirmek için gereken system.diagnostics yapılandırması gösterilmektedir. Yapılandırma bölümü app.config veya web.config dosyalarına eklenebilir.

Not

10.0.0'dan eski bir sürüm kullanıyorsanız, yerine adını Microsoft.WindowsAzure.StorageMicrosoft.Azure.Storagekullanın.

<system.diagnostics>  
     <!--In a dev/test environment you can set autoflush to true in order to autoflush to the log file. -->  
  <trace autoflush="false">  
    <listeners>  
      ...
      <add name="storageListener" />  
    </listeners>  
  </trace>  
  <sources>  
    <source name="Microsoft.Azure.Storage">  
      <listeners>  
        <add name="storageListener"/>  
      </listeners>  
    </source>  
  </sources>  
  <switches>  
    <add name="Microsoft.Azure.Storage" value="Verbose" />  
  </switches>  
  <sharedListeners>  
    <add name="storageListener"  
      type="System.Diagnostics.TextWriterTraceListener"  
      initializeData="C:\logs\WebRole.log"
      traceOutputOptions="DateTime" />  
  </sharedListeners>  
</system.diagnostics>  
  

Not

4.6.1-4.7.1 (dahil) sürümlerine sahip .NET Framework kullanıcılar, Visual Studio'nun NuGet paket yöneticisi tarafından otomatik olarak seçilebilen Azure Depolama kitaplıklarının .NET Standard 2.0 yapıtlarını kullanırken günlüğe kaydetme sorunlarıyla karşılaşabilir. Kitaplıklar, bu sorunlarla karşılaşmayan .NET Framework 4.5.2 yapıtları olarak da yayımlanır. Daha fazla bilgi için .NET Standard sürüm desteği hakkında bilgi edinin.

Bu örnekte, istemci kitaplığı fiziksel dosyasına C:\logs\WebRole.loggünlük iletileri yazacak şekilde yapılandırılır. Windows olay günlüğüne yazmak için EventLogTraceListener veya ETW alt sistemine izleme verileri yazmak için EventProviderTraceListener gibi diğer izleme dinleyicilerini de kullanabilirsiniz.

Önemli

Günlük dosyasının tam klasör yolu yerel dosya sisteminde bulunmalıdır. Bu örnekte, bu klasördeki bir dosyaya C:\logs günlük yazmadan önce klasörü oluşturmanız gerektiği anlamına gelir.

Ayrıca, günlük girdilerini arabelleğe almak yerine hemen dosyaya yazmak için autoflush değerini true olarak ayarlayabilirsiniz. Bu ayar, düşük hacimli izleme iletilerine sahip bir geliştirme/test ortamında yararlı olabilir, ancak üretim ortamında autoflush değerini false olarak ayarlamak isteyebilirsiniz. İstemcideki tüm depolama işlemleri için istemci izlemeyi etkinleştirmek (ve tüm iletiler için Ayrıntılı gibi bir düzey belirtmek) için yapılandırma ayarlarını kullanırsınız.

Id Günlük Düzeyi Ekinlikler
0 Kapalı Hiçbir şey günlüğe kaydedilmez.
1 Hata Bir özel durum dahili olarak işlenemiyorsa ve kullanıcıya atılırsa, hata olarak günlüğe kaydedilir.
2 Uyarı Bir özel durum yakalanıp dahili olarak işlenirse uyarı olarak günlüğe kaydedilir. Bu günlük düzeyi için birincil kullanım örneği, yeniden deneme senaryosudur ve yeniden denemek için kullanıcıya bir özel durum atılmaz. Bu davranış, 404 hatasının sessizce işlendiği CreateIfNotExists gibi işlemlerde de oluşabilir.
3 Bilgilendirici Aşağıdaki bilgiler günlüğe kaydedilir:

•Kullanıcı bir işlemi başlatmak için bir yöntemi çağırdıktan hemen sonra, URI ve istemci istek kimliği gibi istek ayrıntıları günlüğe kaydedilir.

•zaman damgalarını işaretlemek için İstek Gönderme Başlangıç/Bitişi, Karşıya Veri Yükleme Başlangıç/Bitişi, Yanıt Alma Başlangıç/Bitişi, Veri Başlangıç/Bitişini İndirme gibi önemli kilometre taşları günlüğe kaydedilir.

•Üst bilgiler alındıktan hemen sonra istek kimliği ve HTTP durum kodu gibi yanıt ayrıntıları günlüğe kaydedilir.

•Bir işlem başarısız olursa ve depolama istemcisi yeniden denemeye karar verirse, bu kararın nedeni bir sonraki yeniden denemenin ne zaman gerçekleşeceğiyle ilgili bilgilerle birlikte günlüğe kaydedilir.

•Depolama istemcisi bekleyen bir isteği iptal etmeye karar verirse tüm istemci tarafı zaman aşımları günlüğe kaydedilir.
4 Ayrıntılı Aşağıdaki bilgiler günlüğe kaydedilir:

•Her istek için dizeden imzaya.

•operasyonlara özgü ek ayrıntılar (tanımlamak ve kullanmak için her işlem için).

Varsayılan olarak, istemci kitaplığı tüm depolama işlemlerinin ayrıntılarını yapılandırma dosyasında belirttiğiniz ayrıntı düzeyinde günlüğe kaydeder. Günlüğe kaydedilen veri miktarını azaltmak ve ihtiyacınız olan bilgileri bulmanıza yardımcı olmak için günlük kaydını istemci uygulamanızın belirli alanlarıyla sınırlayabilirsiniz. Günlüklere yazılan veri miktarını sınırlamak için istemci uygulamanıza kod eklemeniz gerekir. Genellikle, yapılandırma dosyasında istemci tarafı izlemeyi etkinleştirdikten sonra OperationContext sınıfını kullanarak kodda genel olarak kapatırsınız. Örneğin, uygulamanız herhangi bir depolama işlemi gerçekleştirmeden önce bunu Application_Start yöntemindeki ASP.NET bir MVC uygulamasında yapabilirsiniz:

protected void Application_Start()  
{  
    ...  
  
    // Disable Default Logging for Windows Azure Storage  
    OperationContext.DefaultLogLevel = LogLevel.Off;  
  
    // Verify that all of the tables, queues, and blob containers used in this application  
    // exist, and create any that don't already exist.  
    CreateTablesQueuesBlobContainers();  
}  

Ardından, günlük düzeyini tanımlayan özel bir OperationContext nesnesi oluşturarak ilgilendiğiniz belirli işlemler için izlemeyi etkinleştirebilirsiniz. Ardından, aşağıdaki örnekte olduğu gibi operationContext nesnesini depolama işlemini çağırmak için kullandığınız Execute yöntemine parametre olarak geçirin:

[HttpPost]  
[ValidateAntiForgeryToken]  
public ActionResult Create(Subscriber subscriber)  
{  
    if (ModelState.IsValid)  
    {  
       ...  
        var insertOperation = TableOperation.Insert(subscriber);  
        OperationContext verboseLoggingContext = new OperationContext() { LogLevel = LogLevel.Verbose };  
        mailingListTable.Execute(insertOperation, null, verboseLoggingContext);  
        return RedirectToAction("Index");  
    }  
  
    ...  
    return View(subscriber);  
}  
  

İstemci tarafı günlük şeması ve örneği

Aşağıdaki örnek, c3aa328b içeren bir istemci istek kimliğine sahip bir işlem için istemci kitaplığı tarafından oluşturulan istemci tarafı günlüğünden bir ayıklamadır. İstemci istek kimliği, istemci tarafında günlüğe kaydedilen iletilerin ağ izlemeleri ve depolama günlükleriyle ilişkilendirilmesine olanak tanıyan bir bağıntı tanımlayıcısıdır. Bağıntı hakkında daha fazla bilgi için bkz. Azure Depolama'yı izleme, tanılama ve sorunlarını giderme. Ayıklama, günlük dosyalarının içinden gözlemlenebilen bazı önemli bilgilere açıklama (girintili ve italik) ekler.

Aşağıdaki günlük dosyasının ilk satırını kullanarak bu işlevi göstermek için alanlar şunlardır:

Günlük alanı Değer
Kaynak Microsoft.Azure.Storage
Ayrıntı Düzeyi Bilgi
Ayrıntı No 3
İstemci İstek Kimliği c3aa328b...
İşlem Metni PrimaryOnly konum modu başına Birincil konumuyla işlem başlatılıyor.

Microsoft.Azure.Storage Information: 3 : c3aa328b...: Starting operation with location Primary per location mode PrimaryOnly.
Yukarıdaki izleme iletisi , konum modunun yalnızca birincil olarak ayarlandığını gösterir; başka bir deyişle başarısız bir istek ikincil bir konuma gönderilmez.
Microsoft.Azure.Storage Information: 3 : c3aa328b...: Starting synchronous request to https://storageaccountname.table.core.windows.net/mailinglist.
Yukarıdaki izleme iletisi, isteğin zaman uyumlu olduğunu gösterir.
Microsoft.Azure.Storage Information: 3 : c3aa328b...: Setting payload format for the request to 'Json'.
Yukarıdaki izleme iletisi, yanıtın JSON olarak biçimlendirilmiş olarak döndürülmesi gerektiğini gösterir.
Microsoft.Azure.Storage Verbose: 4 : c3aa328b...: StringToSign = GET...Fri, 23 May 2014 06:19:48 GMT./storageaccountname/mailinglist.
Yukarıdaki izleme iletisi, kimlik doğrulama hatalarında hata ayıklamak için yararlı olan StringToSign bilgilerini içerir. Ayrıntılı iletiler ayrıca işlem türü ve istek parametreleri de dahil olmak üzere tam istek ayrıntılarını içerir.
Microsoft.Azure.Storage Information: 3 : c3aa328b...: Waiting for response.
Yukarıdaki izleme iletisi, isteğin gönderildiğini ve istemcinin yanıt beklediğini gösterir.
Microsoft.Azure.Storage Information: 3 : c3aa328b...: Response received. Status code = 200, Request ID = 417db530-853d-48a7-a23c-0c8d5f728178, Content-MD5 = , ETag =
Yukarıdaki izleme iletisi, yanıtın alındığını ve http durum kodunu gösterir.
Microsoft.Azure.Storage Information: 3 : c3aa328b...: Response headers were processed successfully, proceeding with the rest of the operation.
Microsoft.Azure.Storage Information: 3 : c3aa328b...: Processing response body.
Microsoft.Azure.Storage Information: 3 : c3aa328b...: Retrieved '8' results with continuation token ''.
Yukarıdaki izleme iletisi 8 sonuç alındığını ve devamlılık belirteci sağlanmadığını gösterir; başka bir deyişle bu sorgu için başka sonuç yoktur.
Microsoft.Azure.Storage Information: 3 : c3aa328b...: Operation completed successfully.
Yukarıdaki izleme iletisi, işlemin başarıyla tamamlandığını gösterir.

Aşağıdaki iki ayrıntılı (düzey 4) günlük girdisi bir HEAD ve DELETE isteği gösterir ve İşlem Metni alanındaki ayrıntılı bilgileri gösterir:
Microsoft.Azure.Storage Verbose: 4 : 07b26a5d...: StringToSign = HEAD............x-ms-client-request-id:07b26a5d....x-ms-date:Tue, 03 Jun 2014 10:33:11 GMT.x-ms-version:2014-02-14./storageaccountname/azuremmblobcontainer.restype:container.
Microsoft.Azure.Storage Verbose: 4 : 07b26a5d...: StringToSign = DELETE............x-ms-client-request-id:07b26a5d....x-ms-date:Tue, 03 Jun 2014 10:33:12 GMT.x-ms-version:2014-02-14./storageaccountname/azuremmblobcontainer.restype:container.
Yukarıdaki izleme iletisi, belirli bir istekle ilgili ayrıntılı bilgiler de dahil olmak üzere ayrıntılı izleme iletileri içindeki OperationText alanını gösterir. Bu ayrıntılar HTTP işlem türünü (örneğin HEAD, DELETE, POST), istemci istek kimliğini, zaman damgasını, SDK sürümünü ve işleme özgü ek verileri içerir.