Pengelogan dan diagnostik di ASP.NET Core SignalR
Artikel ini menyediakan panduan untuk mengumpulkan diagnostik dari aplikasi ASP.NET Core SignalR Anda untuk membantu memecahkan masalah.
Pengelogan sisi server
Peringatan
Log sisi server mungkin berisi informasi sensitif dari aplikasi Anda. Jangan pernah memposting log mentah dari aplikasi produksi ke forum publik seperti GitHub.
Karena SignalR merupakan bagian dari ASP.NET Core, ia menggunakan sistem pengelogan ASP.NET Core. Dalam konfigurasi default, SignalR mencatat informasi yang sangat sedikit, tetapi ini dapat dikonfigurasi. Lihat dokumentasi tentang pengelogan ASP.NET Core untuk detail tentang mengonfigurasi pengelogan ASP.NET Core.
SignalR menggunakan dua kategori pencatat:
Microsoft.AspNetCore.SignalR
: Untuk log yang terkait dengan Protokol Hub, mengaktifkan Hub, memanggil metode, dan aktivitas terkait Hub lainnya.Microsoft.AspNetCore.Http.Connections
: Untuk log yang terkait dengan transportasi, seperti WebSockets, Long Polling, Server-Sent Events, dan infrastruktur tingkat SignalR rendah.
Untuk mengaktifkan log terperinci dari SignalR, konfigurasikan kedua awalan sebelumnya ke Debug
tingkat dalam file Anda appsettings.json
dengan menambahkan item berikut ke sub-bagian LogLevel
di Logging
:
{
"Logging": {
"LogLevel": {
"Default": "Debug",
"System": "Information",
"Microsoft": "Information",
"Microsoft.AspNetCore.SignalR": "Debug",
"Microsoft.AspNetCore.Http.Connections": "Debug"
}
}
}
Anda juga dapat mengonfigurasi ini dalam kode dalam metode Anda CreateWebHostBuilder
:
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureLogging(logging =>
{
logging.AddFilter("Microsoft.AspNetCore.SignalR", LogLevel.Debug);
logging.AddFilter("Microsoft.AspNetCore.Http.Connections", LogLevel.Debug);
})
.UseStartup<Startup>();
Jika Anda tidak menggunakan konfigurasi berbasis JSON, atur nilai konfigurasi berikut dalam sistem konfigurasi Anda:
Logging:LogLevel:Microsoft.AspNetCore.SignalR
=Debug
Logging:LogLevel:Microsoft.AspNetCore.Http.Connections
=Debug
Periksa dokumentasi untuk sistem konfigurasi Anda untuk menentukan cara menentukan nilai konfigurasi berlapis. Misalnya, saat menggunakan variabel lingkungan, dua _
karakter digunakan alih-alih :
(misalnya, Logging__LogLevel__Microsoft.AspNetCore.SignalR
).
Sebaiknya gunakan Debug
tingkat saat mengumpulkan diagnostik yang lebih rinci untuk aplikasi Anda. Tingkat ini Trace
menghasilkan diagnostik tingkat yang sangat rendah dan jarang diperlukan untuk mendiagnosis masalah di aplikasi Anda.
Mengakses log sisi server
Cara Anda mengakses log sisi server bergantung pada lingkungan tempat Anda menjalankan.
Sebagai aplikasi konsol di luar IIS
Jika Anda berjalan di aplikasi konsol, pencatat Konsol harus diaktifkan secara default. SignalR log akan muncul di konsol.
Dalam IIS Express dari Visual Studio
Visual Studio menampilkan output log di jendela Output . Pilih opsi drop-down ASP.NET Core Web Server.
Azure App Service
Aktifkan opsi Pengelogan Aplikasi (Filesystem) di bagian Log diagnostik portal Azure App Service dan konfigurasikan Tingkat ke Verbose
. Log harus tersedia dari layanan streaming Log dan log pada sistem file App Service. Untuk informasi selengkapnya, lihat Streaming log Azure.
Lingkungan lainnya
Jika aplikasi disebarkan ke lingkungan lain (misalnya, Docker, Kubernetes, atau Windows Service), lihat Pengelogan di .NET Core dan ASP.NET Core untuk informasi selengkapnya tentang cara mengonfigurasi penyedia pengelogan yang cocok untuk lingkungan.
Pengelogan klien JavaScript
Peringatan
Log sisi klien mungkin berisi informasi sensitif dari aplikasi Anda. Jangan pernah memposting log mentah dari aplikasi produksi ke forum publik seperti GitHub.
Saat menggunakan klien JavaScript, Anda dapat mengonfigurasi opsi pengelogan configureLogging
menggunakan metode pada HubConnectionBuilder
:
let connection = new signalR.HubConnectionBuilder()
.withUrl("/my/hub/url")
.configureLogging(signalR.LogLevel.Debug)
.build();
Untuk menonaktifkan pengelogan kerangka kerja, tentukan signalR.LogLevel.None
dalam configureLogging
metode . Perhatikan bahwa beberapa pengelogan dipancarkan langsung oleh browser dan tidak dapat dinonaktifkan melalui pengaturan tingkat log.
Tabel berikut ini memperlihatkan tingkat log yang tersedia untuk klien JavaScript. Mengatur tingkat log ke salah satu nilai ini memungkinkan pengelogan pada tingkat tersebut dan semua tingkat di atasnya dalam tabel.
Tingkat | Deskripsi |
---|---|
None |
Tidak ada pesan yang dicatat. |
Critical |
Pesan yang menunjukkan kegagalan di seluruh aplikasi. |
Error |
Pesan yang menunjukkan kegagalan dalam operasi saat ini. |
Warning |
Pesan yang menunjukkan masalah yang tidak fatal. |
Information |
Pesan informasi. |
Debug |
Pesan diagnostik berguna untuk penelusuran kesalahan. |
Trace |
Pesan diagnostik yang sangat rinci yang dirancang untuk mendiagnosis masalah tertentu. |
Setelah Anda mengonfigurasi verbositas, log akan ditulis ke Konsol Browser (atau Output Standar di aplikasi NodeJS).
Jika Anda ingin mengirim log ke sistem pengelogan kustom, Anda dapat menyediakan objek JavaScript yang mengimplementasikan ILogger
antarmuka. Satu-satunya metode yang perlu diimplementasikan adalah log
, yang mengambil tingkat peristiwa dan pesan yang terkait dengan peristiwa. Contohnya:
import { ILogger, LogLevel, HubConnectionBuilder } from "@microsoft/signalr";
export class MyLogger implements ILogger {
log(logLevel: LogLevel, message: string) {
// Use `message` and `logLevel` to record the log message to your own system
}
}
// later on, when configuring your connection...
let connection = new HubConnectionBuilder()
.withUrl("/my/hub/url")
.configureLogging(new MyLogger())
.build();
import { ILogger, LogLevel, HubConnectionBuilder } from "@aspnet/signalr";
export class MyLogger implements ILogger {
log(logLevel: LogLevel, message: string) {
// Use `message` and `logLevel` to record the log message to your own system
}
}
// later on, when configuring your connection...
let connection = new HubConnectionBuilder()
.withUrl("/my/hub/url")
.configureLogging(new MyLogger())
.build();
Pengelogan klien .NET
Peringatan
Log sisi klien mungkin berisi informasi sensitif dari aplikasi Anda. Jangan pernah memposting log mentah dari aplikasi produksi ke forum publik seperti GitHub.
Untuk mendapatkan log dari klien .NET, Anda dapat menggunakan ConfigureLogging
metode pada HubConnectionBuilder
. Ini bekerja dengan cara yang sama seperti ConfigureLogging
metode pada WebHostBuilder
dan HostBuilder
. Anda dapat mengonfigurasi penyedia pengelogan yang sama dengan yang Anda gunakan di ASP.NET Core. Namun, Anda harus menginstal dan mengaktifkan paket NuGet secara manual untuk masing-masing penyedia pengelogan.
Untuk menambahkan pengelogan klien .NET ke Blazor WebAssembly aplikasi, lihat pengelogan ASP.NET CoreBlazor.
Pengelogan konsol
Untuk mengaktifkan pengelogan Konsol, tambahkan paket Microsoft.Extensions.Logging.Console . Kemudian, gunakan AddConsole
metode untuk mengonfigurasi pencatat konsol:
var connection = new HubConnectionBuilder()
.WithUrl("https://example.com/my/hub/url")
.ConfigureLogging(logging =>
{
// Log to the Console
logging.AddConsole();
// This will set ALL logging to Debug level
logging.SetMinimumLevel(LogLevel.Debug);
})
.Build();
Pencatatan jendela output debug
Anda juga dapat mengonfigurasi log untuk masuk ke jendela Output di Visual Studio. Instal paket Microsoft.Extensions.Logging.Debug dan gunakan AddDebug
metode :
var connection = new HubConnectionBuilder()
.WithUrl("https://example.com/my/hub/url")
.ConfigureLogging(logging =>
{
// Log to the Output Window
logging.AddDebug();
// This will set ALL logging to Debug level
logging.SetMinimumLevel(LogLevel.Debug)
})
.Build();
Penyedia pengelogan lainnya
SignalR mendukung penyedia pengelogan lain seperti Serilog, Seq, NLog, atau sistem pengelogan lainnya yang terintegrasi dengan Microsoft.Extensions.Logging
. Jika sistem pengelogan ILoggerProvider
Anda menyediakan , Anda dapat mendaftarkannya dengan AddProvider
:
var connection = new HubConnectionBuilder()
.WithUrl("https://example.com/my/hub/url")
.ConfigureLogging(logging =>
{
// Log to your custom provider
logging.AddProvider(new MyCustomLoggingProvider());
// This will set ALL logging to Debug level
logging.SetMinimumLevel(LogLevel.Debug)
})
.Build();
Kontrol verbositas
Jika Anda pengelogan dari tempat lain di aplikasi Anda, mengubah tingkat Debug
default menjadi mungkin terlalu verbose. Anda dapat menggunakan Filter untuk mengonfigurasi tingkat pengelogan untuk SignalR log. Ini dapat dilakukan dalam kode, dengan cara yang sama seperti di server:
var connection = new HubConnectionBuilder()
.WithUrl("https://example.com/my/hub/url")
.ConfigureLogging(logging =>
{
// Register your providers
// Set the default log level to Information, but to Debug for SignalR-related loggers.
logging.SetMinimumLevel(LogLevel.Information);
logging.AddFilter("Microsoft.AspNetCore.SignalR", LogLevel.Debug);
logging.AddFilter("Microsoft.AspNetCore.Http.Connections", LogLevel.Debug);
})
.Build();
Jejak jaringan
Peringatan
Jejak jaringan berisi konten lengkap dari setiap pesan yang dikirim oleh aplikasi Anda. Jangan pernah memposting jejak jaringan mentah dari aplikasi produksi ke forum publik seperti GitHub.
Jika Anda mengalami masalah, jejak jaringan terkadang dapat memberikan banyak informasi yang bermanfaat. Ini sangat berguna jika Anda akan mengajukan masalah pada pelacak masalah kami.
Mengumpulkan jejak jaringan dengan Fiddler (opsi pilihan)
Metode ini berfungsi untuk semua aplikasi.
Fiddler adalah alat yang sangat kuat untuk mengumpulkan jejak HTTP. Pasang dari telerik.com/fiddler, luncurkan, lalu jalankan aplikasi Anda dan ulangi masalahnya. Fiddler tersedia untuk Windows, dan ada versi beta untuk macOS dan Linux.
Jika Anda terhubung menggunakan HTTPS, ada beberapa langkah tambahan untuk memastikan Fiddler dapat mendekripsi lalu lintas HTTPS. Untuk detail selengkapnya, lihat dokumentasi Fiddler.
Setelah Anda mengumpulkan jejak, Anda dapat mengekspor jejak dengan memilih File>Simpan>Semua Sesi dari bilah menu.
Kumpulkan jejak jaringan dengan tcpdump (khusus macOS dan Linux)
Metode ini berfungsi untuk semua aplikasi.
Anda dapat mengumpulkan jejak TCP mentah menggunakan tcpdump dengan menjalankan perintah berikut dari shell perintah. Anda mungkin harus root
atau mengawali perintah dengan sudo
jika Anda mendapatkan kesalahan izin:
tcpdump -i [interface] -w trace.pcap
Ganti [interface]
dengan antarmuka jaringan yang ingin Anda ambil. Biasanya, ini seperti /dev/eth0
(untuk antarmuka Ethernet standar Anda) atau /dev/lo0
(untuk lalu lintas host lokal). Untuk informasi lebih lanjut, lihat tcpdump
halaman manual pada sistem host Anda.
Mengumpulkan jejak jaringan dengan browser
Metode ini hanya berfungsi untuk aplikasi berbasis browser.
Sebagian besar konsol alat pengembang browser memiliki tab "Jaringan" yang memungkinkan Anda mengambil aktivitas jaringan antara browser dan server. Namun, jejak ini tidak menyertakan pesan WebSocket dan Peristiwa Terkirim Server. Jika Anda menggunakan transportasi tersebut, menggunakan alat seperti Fiddler atau TcpDump (dijelaskan di bawah) adalah pendekatan yang lebih baik.
Microsoft Edge dan Internet Explorer
(Instruksinya sama untuk Edge dan Internet Explorer)
- Tekan F12 untuk membuka Dev Tools
- Klik Tab Jaringan
- Refresh halaman (jika perlu) dan ulangi masalahnya
- Klik ikon Simpan di toolbar untuk mengekspor jejak sebagai file "HAR":
Google Chrome
- Tekan F12 untuk membuka Dev Tools
- Klik Tab Jaringan
- Refresh halaman (jika perlu) dan ulangi masalahnya
- Klik kanan di mana saja dalam daftar permintaan dan pilih "Simpan sebagai HAR dengan konten":
Mozilla Firefox
- Tekan F12 untuk membuka Dev Tools
- Klik Tab Jaringan
- Refresh halaman (jika perlu) dan ulangi masalahnya
- Klik kanan di mana saja dalam daftar permintaan dan pilih "Simpan Semua Sebagai HAR"
Lampirkan file diagnostik ke masalah GitHub
Anda dapat melampirkan file Diagnostik ke masalah GitHub dengan mengganti namanya sehingga mereka memiliki .txt
ekstensi lalu menyeret dan menghilangkannya ke masalah.
Catatan
Jangan tempel konten file log atau jejak jaringan ke dalam masalah GitHub. Log dan jejak ini bisa cukup besar, dan GitHub biasanya memotongnya.
Metrik
Metrik adalah representasi pengukuran data selama interval waktu. Misalnya, permintaan per detik. Data metrik memungkinkan pengamatan status aplikasi pada tingkat tinggi. Metrik .NET gRPC dipancarkan menggunakan EventCounter.
SignalR metrik server
SignalR metrik server dilaporkan pada Microsoft.AspNetCore.Http.Connections sumber peristiwa.
Nama | Deskripsi |
---|---|
connections-started |
Total koneksi dimulai |
connections-stopped |
Total koneksi dihentikan |
connections-timed-out |
Total koneksi habis |
current-connections |
Koneksi saat ini |
connections-duration |
Durasi koneksi rata-rata |
Mengamati metrik
penghitung dotnet adalah alat pemantauan performa untuk pemantauan kesehatan ad-hoc dan penyelidikan performa tingkat pertama. Pantau aplikasi .NET dengan Microsoft.AspNetCore.Http.Connections
sebagai nama penyedia. Contohnya:
> dotnet-counters monitor --process-id 37016 Microsoft.AspNetCore.Http.Connections
Press p to pause, r to resume, q to quit.
Status: Running
[Microsoft.AspNetCore.Http.Connections]
Average Connection Duration (ms) 16,040.56
Current Connections 1
Total Connections Started 8
Total Connections Stopped 7
Total Connections Timed Out 0
Sumber Daya Tambahan:
ASP.NET Core