ASP.NET Core'da günlüğe kaydetme ve tanılama SignalR
Tarafından Andrew Stanton-Nurse
Bu makalede, sorunları gidermeye yardımcı olmak için ASP.NET Core SignalR uygulamanızdan tanılama toplamaya yönelik yönergeler sağlanır.
Sunucu tarafı günlüğü
Uyarı
Sunucu tarafı günlükleri, uygulamanızdan hassas bilgiler içerebilir. Üretim uygulamalarından GitHub gibi genel forumlara asla ham günlük göndermeyin.
SignalR ASP.NET Core'un bir parçası olduğundan ASP.NET Core günlük sistemini kullanır. Varsayılan yapılandırmada çok SignalR az bilgi günlüğe kaydeder, ancak bu yapılandırılabilir. ASP.NET Core günlüğünü yapılandırma hakkında ayrıntılı bilgi için ASP.NET Core günlüğü belgelerine bakın.
SignalR iki günlükçü kategorisi kullanır:
Microsoft.AspNetCore.SignalR
: Hub Protokolleri, Hub'ları etkinleştirme, çağırma yöntemleri ve Hub ile ilgili diğer etkinliklerle ilgili günlükler için.Microsoft.AspNetCore.Http.Connections
: WebSockets, Long Polling, Server-Sent Events ve alt düzey SignalR altyapı gibi aktarımlarla ilgili günlükler için.
öğesinden SignalRayrıntılı günlükleri etkinleştirmek için, dosyasındaki alt bölüme Debug
aşağıdaki öğeleri ekleyerek önceki ön eklerin her ikisini de Logging
dosyanızdaki appsettings.json
düzeye LogLevel
yapılandırın:
{
"Logging": {
"LogLevel": {
"Default": "Debug",
"System": "Information",
"Microsoft": "Information",
"Microsoft.AspNetCore.SignalR": "Debug",
"Microsoft.AspNetCore.Http.Connections": "Debug"
}
}
}
Bunu yönteminizdeki CreateWebHostBuilder
kodda da yapılandırabilirsiniz:
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>();
JSON tabanlı yapılandırma kullanmıyorsanız yapılandırma sisteminizde aşağıdaki yapılandırma değerlerini ayarlayın:
Logging:LogLevel:Microsoft.AspNetCore.SignalR
=Debug
Logging:LogLevel:Microsoft.AspNetCore.Http.Connections
=Debug
İç içe yapılandırma değerlerinin nasıl belirtileceğini belirlemek için yapılandırma sisteminizin belgelerine bakın. Örneğin, ortam değişkenleri kullanılırken yerine iki _
karakter kullanılır :
(örneğin, Logging__LogLevel__Microsoft.AspNetCore.SignalR
).
Uygulamanız için daha ayrıntılı tanılamalar toplarken düzeyi kullanmanızı Debug
öneririz. Trace
Düzeyi çok düşük düzeyde tanılamalar oluşturur ve uygulamanızdaki sorunları tanılamak için nadiren gereklidir.
Sunucu tarafı günlüklerine erişme
Sunucu tarafı günlüklerine nasıl erişebileceğiniz, çalıştırdığınız ortama bağlıdır.
IIS dışında bir konsol uygulaması olarak
Konsol uygulamasında çalıştırıyorsanız Konsol günlükçüsunun varsayılan olarak etkinleştirilmesi gerekir. SignalR günlükleri konsolunda görünür.
Visual Studio'dan IIS Express içinde
Visual Studio, çıkış penceresinde günlük çıkışını görüntüler. ASP.NET Çekirdek Web Sunucusu açılan seçeneğini belirleyin.
Azure App Service
Azure Uygulaması Hizmeti portalının Tanılama günlükleri bölümünde Uygulama Günlüğü (Dosya Sistemi) seçeneğini etkinleştirin ve Düzeyi olarak Verbose
yapılandırın. Günlükler, Günlük akışı hizmetinden ve App Service'in dosya sistemindeki günlüklerde kullanılabilir olmalıdır. Daha fazla bilgi için bkz . Azure günlük akışı.
Diğer ortamlar
Uygulama başka bir ortama (örneğin Docker, Kubernetes veya Windows Hizmeti) dağıtıldıysa, ortama uygun günlük sağlayıcılarını yapılandırma hakkında daha fazla bilgi için bkz . .NET Core'da oturum açma ve ASP.NET Core .
JavaScript istemci günlüğü
Uyarı
İstemci tarafı günlükleri, uygulamanızdan hassas bilgiler içerebilir. Üretim uygulamalarından GitHub gibi genel forumlara asla ham günlük göndermeyin.
JavaScript istemcisini kullanırken, üzerinde HubConnectionBuilder
yöntemini kullanarak configureLogging
günlük seçeneklerini yapılandırabilirsiniz:
let connection = new signalR.HubConnectionBuilder()
.withUrl("/my/hub/url")
.configureLogging(signalR.LogLevel.Debug)
.build();
Çerçeve günlüğünü devre dışı bırakmak için yönteminde belirtin signalR.LogLevel.None
configureLogging
. Bazı günlüklerin doğrudan tarayıcı tarafından yayıldığını ve günlük düzeyi ayarlanarak devre dışı bırakılmadığını unutmayın.
Aşağıdaki tabloda JavaScript istemcisi tarafından kullanılabilen günlük düzeyleri gösterilmektedir. Günlük düzeyinin bu değerlerden birine ayarlanması, bu düzeyde ve tablonun üzerindeki tüm düzeylerde günlüğe kaydetmeyi sağlar.
Level | Açıklama |
---|---|
None |
Hiçbir ileti günlüğe kaydedilmez. |
Critical |
Uygulamanın tamamında hata olduğunu belirten iletiler. |
Error |
Geçerli işlemde bir hata olduğunu belirten iletiler. |
Warning |
Önemli olmayan bir sorunu gösteren iletiler. |
Information |
Bilgilendiren iletiler. |
Debug |
Hata ayıklama için yararlı tanılama iletileri. |
Trace |
Belirli sorunları tanılamak için tasarlanmış çok ayrıntılı tanılama iletileri. |
Ayrıntı düzeyini yapılandırdıktan sonra günlükler Tarayıcı Konsolu'na (veya NodeJS uygulamasında Standart Çıkış) yazılır.
Günlükleri özel bir günlüğe kaydetme sistemine göndermek istiyorsanız arabirimi uygulayan ILogger
bir JavaScript nesnesi sağlayabilirsiniz. Uygulanması gereken tek yöntem, olay düzeyini ve olayla ilişkili iletiyi alan yöntemidir log
. Örneğin:
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();
.NET istemci günlüğü
Uyarı
İstemci tarafı günlükleri, uygulamanızdan hassas bilgiler içerebilir. Üretim uygulamalarından GitHub gibi genel forumlara asla ham günlük göndermeyin.
.NET istemcisinden günlükleri almak için üzerinde HubConnectionBuilder
yöntemini kullanabilirsinizConfigureLogging
. Bu, ve HostBuilder
üzerindeki WebHostBuilder
yöntemiyle ConfigureLogging
aynı şekilde çalışır. ASP.NET Core'da kullandığınız günlük sağlayıcılarının aynısını yapılandırabilirsiniz. Ancak, tek tek günlük sağlayıcıları için NuGet paketlerini el ile yüklemeniz ve etkinleştirmeniz gerekir.
Bir Blazor WebAssembly uygulamaya .NET istemci günlüğü eklemek için bkz . ASP.NET Çekirdek Blazor günlüğü.
Konsol günlüğü
Konsol günlüğünü etkinleştirmek için Microsoft.Extensions.Logging.Console paketini ekleyin. Ardından konsol günlükçüsüsü AddConsole
yapılandırmak için yöntemini kullanın:
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();
Çıkış penceresi günlüğünde hata ayıklama
Günlükleri, Visual Studio'da Çıkış penceresine gidecek şekilde de yapılandırabilirsiniz. Microsoft.Extensions.Logging.Debug paketini yükleyin ve yöntemini kullanınAddDebug
:
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();
Diğer günlük sağlayıcıları
SignalR Serilog, Seq, NLog gibi diğer günlük sağlayıcılarını veya ile Microsoft.Extensions.Logging
tümleşen diğer günlük sistemlerini destekler. Günlük sisteminiz bir ILoggerProvider
sağlıyorsa ile AddProvider
kaydedebilirsiniz:
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();
Ayrıntı düzeyini denetleme
Uygulamanızdaki diğer yerlerden oturum açıyorsanız, varsayılan düzeyin Debug
olarak değiştirilmesi çok ayrıntılı olabilir. Günlükler için günlük düzeyini yapılandırmak için SignalR Filtre kullanabilirsiniz. Bu, kodda, sunucudakiyle aynı şekilde yapılabilir:
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();
Ağ izlemeleri
Uyarı
Ağ izlemesi, uygulamanız tarafından gönderilen her iletinin tam içeriğini içerir. Üretim uygulamalarından ham ağ izlemelerini Asla GitHub gibi genel forumlara göndermeyin.
Bir sorunla karşılaşırsanız, ağ izlemesi bazen birçok yararlı bilgi sağlayabilir. Bu özellikle sorun izleyicimizde bir sorun bildirecekseniz kullanışlıdır.
Fiddler ile ağ izlemesi toplama (tercih edilen seçenek)
Bu yöntem tüm uygulamalarda çalışır.
Fiddler, HTTP izlemelerini toplamak için çok güçlü bir araçtır. telerik.com/fiddler'den yükleyin, başlatın ve uygulamanızı çalıştırın ve sorunu yeniden oluşturun. Fiddler, Windows için kullanılabilir ve macOS ve Linux için beta sürümleri vardır.
HTTPS kullanarak bağlanırsanız, Fiddler'ın HTTPS trafiğinin şifresini çözebilmesini sağlamak için bazı ek adımlar vardır. Daha fazla ayrıntı için Fiddler belgelerine bakın.
İzlemeyi topladıktan sonra, menü çubuğundan Dosya>Tüm Oturumları Kaydet'i>seçerek izlemeyi dışarı aktarabilirsiniz.
tcpdump ile ağ izlemesi toplama (yalnızca macOS ve Linux)
Bu yöntem tüm uygulamalarda çalışır.
Bir komut kabuğundan aşağıdaki komutu çalıştırarak tcpdump kullanarak ham TCP izlemeleri toplayabilirsiniz. bir izin hatası alırsanız komutunun sudo
başına root
veya ön eki eklemeniz gerekebilir:
tcpdump -i [interface] -w trace.pcap
değerini yakalamak istediğiniz ağ arabirimiyle değiştirin [interface]
. Bu genellikle (standart Ethernet arabiriminiz için) veya /dev/lo0
(localhost trafiği için) gibi /dev/eth0
bir şeydir. Daha fazla bilgi için konak sisteminizdeki erkek sayfasına bakın tcpdump
.
Tarayıcıda ağ izlemesi toplama
Bu yöntem yalnızca tarayıcı tabanlı uygulamalarda çalışır.
Çoğu tarayıcı geliştirici aracı konsolu, tarayıcı ile sunucu arasındaki ağ etkinliğini yakalamanızı sağlayan bir "Ağ" sekmesine sahiptir. Ancak, bu izlemeler WebSocket ve Sunucu Tarafından Gönderilen Olay iletilerini içermez. Bu aktarımları kullanıyorsanız, Fiddler veya TcpDump gibi bir araç kullanmak (aşağıda açıklanmıştır) daha iyi bir yaklaşımdır.
Microsoft Edge ve Internet Explorer
(Yönergeler hem Edge hem de Internet Explorer için aynıdır)
- Geliştirme Araçları'nı açmak için F12 tuşuna basın
- Ağ Sekmesine tıklayın
- Sayfayı yenileyin (gerekirse) ve sorunu yeniden oluşturun
- İzlemeyi "HAR" dosyası olarak dışarı aktarmak için araç çubuğundaki Kaydet simgesine tıklayın:
Google Chrome
- Geliştirme Araçları'nı açmak için F12 tuşuna basın
- Ağ Sekmesine tıklayın
- Sayfayı yenileyin (gerekirse) ve sorunu yeniden oluşturun
- İstek listesinde herhangi bir yere sağ tıklayın ve "İçerikle HAR olarak kaydet"i seçin:
Mozilla Firefox
- Geliştirme Araçları'nı açmak için F12 tuşuna basın
- Ağ Sekmesine tıklayın
- Sayfayı yenileyin (gerekirse) ve sorunu yeniden oluşturun
- İstek listesinde herhangi bir yere sağ tıklayın ve "Tümünü HAR Olarak Kaydet" seçeneğini belirleyin
GitHub sorunlarına tanılama dosyaları ekleme
Tanılama dosyalarını GitHub sorunlarına eklemek için uzantıya sahip .txt
olmalarını ve ardından sürükleyip soruna bırakmalarını sağlayabilirsiniz.
Not
Lütfen günlük dosyalarının veya ağ izlemelerinin içeriğini GitHub sorununa yapıştırmayın. Bu günlükler ve izlemeler oldukça büyük olabilir ve GitHub genellikle bunları kesebilir.
Ölçümler
Ölçümler, zaman aralıkları içindeki veri ölçülerinin bir gösterimidir. Örneğin, saniye başına istek sayısı. Ölçüm verileri, bir uygulamanın durumunun yüksek düzeyde gözlemlenmesine olanak tanır. .NET gRPC ölçümleri kullanılarak EventCountergönderilir.
SignalR sunucu ölçümleri
SignalR sunucu ölçümleri olay kaynağında Microsoft.AspNetCore.Http.Connections bildirilir.
Veri Akışı Adı | Açıklama |
---|---|
connections-started |
Başlatılan toplam bağlantı sayısı |
connections-stopped |
Durdurulan toplam bağlantı sayısı |
connections-timed-out |
Toplam bağlantı zaman aşımına uğradı |
current-connections |
Geçerli bağlantılar |
connections-duration |
Ortalama bağlantı süresi |
Ölçümleri gözlemleme
dotnet-counters , geçici sistem durumu izleme ve birinci düzey performans araştırması için bir performans izleme aracıdır. Sağlayıcı adı olarak ile Microsoft.AspNetCore.Http.Connections
bir .NET uygulamasını izleyin. Örneğin:
> 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
Ek kaynaklar
ASP.NET Core