Pengelogan sisi klien dengan pustaka klien untuk .NET
Dengan pustaka klien Azure Storage untuk .NET (versi 2.1 dan yang lebih baru), Anda dapat mencatat permintaan Azure Storage dari dalam aplikasi klien .NET Anda dengan menggunakan infrastruktur diagnostik .NET standar. Dengan cara ini, Anda dapat melihat detail permintaan yang dikirim klien Anda ke layanan Azure Storage dan respons yang diterimanya.
Pustaka klien Azure Storage memberi Anda kontrol atas permintaan penyimpanan mana yang dapat Anda catat, dan infrastruktur diagnostik .NET memberi Anda kontrol penuh atas data log, seperti tempat mengirimnya. Misalnya, Anda dapat memilih untuk mengirim data log ke file atau ke aplikasi untuk diproses. Dalam kombinasi dengan Azure Storage Analytics dan pemantauan jaringan, Anda dapat menggunakan pengelogan pustaka klien untuk membangun gambaran terperinci tentang bagaimana aplikasi Anda berinteraksi dengan layanan Azure Storage. Untuk informasi selengkapnya, lihat Memantau, mendiagnosis, dan memecahkan masalah Azure Storage.
Cara mengaktifkan pengelogan pustaka klien
Contoh berikut menunjukkan konfigurasi system.diagnostics yang diperlukan untuk mengumpulkan dan mempertahankan pesan log penyimpanan ke file teks. Bagian konfigurasi dapat ditambahkan ke file app.config atau web.config.
Catatan
Jika Anda menggunakan versi yang lebih lama dari 10.0.0, gunakan nama Microsoft.WindowsAzure.Storage alih-alih Microsoft.Azure.Storage.
<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>
Catatan
.NET Framework pengguna pada versi 4.6.1-4.7.1 (inklusif) mungkin mengalami masalah pengelogan saat menggunakan artefak .NET Standard 2.0 dari pustaka Azure Storage, yang dapat dipilih secara otomatis oleh manajer paket NuGet Visual Studio. Pustaka juga diterbitkan sebagai artefak .NET Framework 4.5.2, yang tidak mengalami masalah ini. Untuk informasi selengkapnya, baca tentang dukungan versi .NET Standard.
Contoh ini mengonfigurasi pustaka klien untuk menulis pesan log ke file C:\logs\WebRole.logfisik . Anda juga dapat menggunakan pendengar jejak lain seperti EventLogTraceListener untuk menulis ke log peristiwa Windows, atau EventProviderTraceListener untuk menulis data pelacakan ke subsistem ETW.
Penting
Jalur folder lengkap untuk file log harus ada pada sistem file lokal. Dalam contoh ini, itu berarti Anda harus terlebih dahulu membuat folder sebelum menulis log ke file di folder tersebut C:\logs .
Selain itu, Anda dapat mengatur autoflush ke true untuk menulis entri log ke file segera alih-alih buffering. Pengaturan ini dapat berguna di lingkungan dev/test dengan volume pesan pelacakan yang rendah, tetapi di lingkungan produksi Anda mungkin ingin mengatur autoflush ke false. Anda menggunakan pengaturan konfigurasi untuk mengaktifkan pelacakan klien (dan untuk menentukan tingkat, seperti Verbose, untuk semua pesan) untuk semua operasi penyimpanan di klien.
| Id | Tingkat log | Acara |
|---|---|---|
| 0 | Nonaktif | Tidak ada yang dicatat. |
| 1 | Kesalahan | Jika pengecualian tidak dapat ditangani secara internal dan dilemparkan ke pengguna, pengecualian dicatat sebagai kesalahan. |
| 2 | Peringatan | Jika pengecualian tertangkap dan ditangani secara internal, pengecualian dicatat sebagai peringatan. Kasus penggunaan utama untuk tingkat log ini adalah skenario coba lagi, di mana pengecualian tidak dilemparkan kembali ke pengguna untuk mencoba kembali. Perilaku ini juga dapat terjadi dalam operasi seperti CreateIfNotExists, di mana kesalahan 404 ditangani secara diam-diam. |
| 3 | Informasi | Info berikut dicatat: •Tepat setelah pengguna memanggil metode untuk memulai operasi, detail permintaan seperti URI dan ID permintaan klien dicatat. •Pencapaian penting seperti Mengirim Permintaan Mulai/Berakhir, Upload Data Mulai/Akhir, Terima Respons Mulai/Akhir, Unduh Data Mulai/Akhir dicatat untuk menandai tanda waktu. •Tepat setelah header diterima, detail respons seperti ID permintaan dan kode status HTTP dicatat. •Jika operasi gagal dan klien penyimpanan memutuskan untuk mencoba kembali, alasan keputusan tersebut dicatat bersama dengan info tentang kapan percobaan ulang berikutnya akan terjadi. •Semua batas waktu sisi klien dicatat ketika klien penyimpanan memutuskan untuk membatalkan permintaan yang tertunda. |
| 4 | Verbose | Info berikut dicatat: •String-to-sign untuk setiap permintaan. •Setiap detail tambahan khusus untuk operasi (hingga setiap operasi untuk didefinisikan dan digunakan). |
Secara default, pustaka klien mencatat detail semua operasi penyimpanan di tingkat verbositas yang Anda tentukan dalam file konfigurasi. Anda juga dapat membatasi pengelogan ke area tertentu dari aplikasi klien Anda untuk mengurangi jumlah data yang dicatat dan untuk membantu Anda menemukan informasi yang Anda butuhkan. Untuk membatasi jumlah data yang ditulis ke log, Anda harus menambahkan beberapa kode ke aplikasi klien Anda. Biasanya, setelah mengaktifkan pelacakan sisi klien dalam file konfigurasi, Anda kemudian menonaktifkannya secara global dalam kode dengan menggunakan kelas OperationContext . Misalnya, Anda dapat melakukan ini dalam aplikasi MVC ASP.NET dalam metode Application_Start sebelum aplikasi Anda melakukan operasi penyimpanan apa pun:
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();
}
Anda kemudian dapat mengaktifkan pelacakan untuk operasi tertentu yang Anda minati dengan membuat objek OperationContext kustom yang menentukan tingkat pengelogan. Kemudian, teruskan objek OperationContext sebagai parameter ke metode Execute yang Anda gunakan untuk memanggil operasi penyimpanan, seperti dalam contoh berikut:
[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);
}
Skema dan sampel log sisi klien
Contoh berikut adalah ekstrak dari log sisi klien yang dihasilkan oleh pustaka klien untuk operasi dengan ID permintaan klien yang menyertakan c3aa328b. ID permintaan klien adalah pengidentifikasi korelasi yang memungkinkan pesan yang dicatat di sisi klien berkorelasi dengan jejak jaringan dan log penyimpanan. Untuk informasi selengkapnya tentang korelasi, lihat Memantau, mendiagnosis, dan memecahkan masalah Azure Storage. Ekstrak mencakup komentar (indentasi dan miring) pada beberapa informasi utama yang dapat diamati dari dalam file log.
Untuk mengilustrasikan fungsionalitas ini menggunakan baris pertama dari file log berikut, bidangnya adalah:
| Bidang log | Nilai |
|---|---|
| Sumber | Microsoft.Azure.Penyimpanan |
| Verbositas | Informasi |
| Verbosity No | 3 |
| ID Permintaan Klien | c3aa328b... |
| Teks Operasi | Memulai operasi dengan lokasi Utama per mode lokasi PrimaryOnly. |
Microsoft.Azure.Storage Information: 3 : c3aa328b...: Starting operation with location Primary per location mode PrimaryOnly.
Pesan jejak sebelumnya menunjukkan bahwa mode lokasi diatur ke utama saja, yang berarti bahwa permintaan yang gagal tidak akan dikirim ke lokasi sekunder.
Microsoft.Azure.Storage Information: 3 : c3aa328b...: Starting synchronous request to https://storageaccountname.table.core.windows.net/mailinglist.
Pesan jejak sebelumnya menunjukkan bahwa permintaan tersebut sinkron.
Microsoft.Azure.Storage Information: 3 : c3aa328b...: Setting payload format for the request to 'Json'.
Pesan jejak sebelumnya menunjukkan bahwa respons harus dikembalikan yang diformat sebagai JSON.
Microsoft.Azure.Storage Verbose: 4 : c3aa328b...: StringToSign = GET...Fri, 23 May 2014 06:19:48 GMT./storageaccountname/mailinglist.
Pesan jejak sebelumnya mencakup informasi StringToSign, yang berguna untuk men-debug kegagalan autentikasi. Pesan verbose juga berisi detail permintaan lengkap, termasuk jenis operasi dan parameter permintaan.
Microsoft.Azure.Storage Information: 3 : c3aa328b...: Waiting for response.
Pesan jejak sebelumnya menunjukkan bahwa permintaan telah dikirim dan klien sedang menunggu respons.
Microsoft.Azure.Storage Information: 3 : c3aa328b...: Response received. Status code = 200, Request ID = 417db530-853d-48a7-a23c-0c8d5f728178, Content-MD5 = , ETag =
Pesan jejak sebelumnya menunjukkan bahwa respons telah diterima dan kode status http-nya.
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 ''.
Pesan jejak sebelumnya menunjukkan bahwa 8 hasil diambil dan tidak ada token kelanjutan yang disediakan, yang berarti tidak ada lagi hasil untuk kueri ini.
Microsoft.Azure.Storage Information: 3 : c3aa328b...: Operation completed successfully.
Pesan jejak sebelumnya menunjukkan bahwa operasi berhasil diselesaikan.
Dua entri log verbose (tingkat 4) berikut menunjukkan permintaan HEAD dan DELETE dan mengilustrasikan informasi terperinci di bidang Teks Operasi :
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.
Pesan jejak sebelumnya menunjukkan bidang OperationText dalam pesan pelacakan verbose, termasuk informasi terperinci yang terkait dengan permintaan tertentu. Detail ini termasuk jenis operasi HTTP (misalnya, HEAD, DELETE, POST), ID permintaan klien, tanda waktu, versi SDK, dan data khusus operasi tambahan.