.NET günlüğü ve izleme
Kod, program çalışırken gerçekleşen ilginç olayların kaydı olarak görev yapan bir günlük oluşturmak için izlenebilir. Uygulamanın davranışını anlamak için günlükler gözden geçirilebilir. .NET, geçmişi üzerinde birkaç farklı günlük API'si biriktirmiştir ve bu makale hangi seçeneklerin kullanılabilir olduğunu anlamanıza yardımcı olacaktır.
Not
Bazı eski Windows ve .NET API'leri de dahil olmak üzere günlük kaydı bazen 'izleme' olarak da adlandırılır. Son yıllarda 'izleme' daha yaygın olarak Dağıtılmış izleme kısaltması olarak kullanılır, ancak bu makalenin anlamı bu değildir.
.NET günlük API'leri
ILogger
Mevcut bir projeye günlük ekleme veya yeni proje oluşturma gibi çoğu durumda ILogger altyapısı iyi bir varsayılan seçenektir. ILogger
hızlı yapılandırılmış günlüğü, esnek yapılandırmayı ve bir ASP.NET uygulamasını çalıştırırken gördüğünüz konsol dahil olmak üzere ortak havuzların bir koleksiyonunu destekler. Ayrıca, ILogger
arabirim, zengin işlevsellik ve genişletilebilirlik sunan birçok üçüncü taraf günlük uygulaması üzerinde bir cephe işlevi de görebilir.
ILogger, .NET için OpenTelemetry uygulaması için günlük hikayesini sağlar ve daha fazla analiz için uygulamanızdan çeşitli APM sistemlerine günlüklerin çıkışını sağlar.
EventSource
EventSource, yapılandırılmış günlüğe kaydetme özelliğine sahip eski ve yüksek performanslı bir API'dir. Başlangıçta Windows için Olay İzleme (ETW) ile iyi tümleştirmek üzere tasarlanmıştır, ancak daha sonra EventPipe platformlar arası izlemeyi ve EventListener özel havuzları destekleyecek şekilde genişletilmiştir. ile EventSource
karşılaştırıldığındaILogger
, nispeten az önceden hazırlanmış günlük havuzu vardır ve ayrı yapılandırma dosyaları aracılığıyla yapılandırmaya yönelik yerleşik destek yoktur. EventSource
ETW veya EventPipe tümleştirmesi üzerinde daha sıkı denetim istiyorsanız mükemmeldir, ancak genel amaçlı günlük kaydı ILogger
için daha esnektir ve kullanımı daha kolaydır.
İzleme
System.Diagnostics.Trace ve System.Diagnostics.Debug şeklindedir. NET'in en eski günlük API'leri. Bu sınıfların esnek yapılandırma API'leri ve büyük bir havuz ekosistemi vardır, ancak yalnızca yapılandırılmamış günlüğe kaydetmeyi destekler. .NET Framework'te bir app.config dosyası aracılığıyla yapılandırılabilirler, ancak .NET Core'da yerleşik, dosya tabanlı yapılandırma mekanizması yoktur. Bunlar genellikle hata ayıklayıcı altında çalışırken geliştirici için tanılama çıktısı üretmek için kullanılır. .NET ekibi geriye dönük uyumluluk amacıyla bu API'leri desteklemeye devam eder, ancak yeni işlevsellik eklenmez. Bu API'ler, zaten bunları kullanan uygulamalar için iyi bir seçimdir. Daha önce bir günlük API'sine ILogger
taahhütte bulunulmayan daha yeni uygulamalar için daha iyi işlevsellik sunabilir.
Özelleştirilmiş günlük API'leri
Konsol
sınıfı, System.Console basit günlük senaryolarında kullanılabilecek ve WriteLine yöntemlerine sahiptirWrite. Bu API'leri kullanmaya başlamak çok kolaydır, ancak çözüm genel amaçlı günlük API'si kadar esnek olmayacaktır. Konsol yalnızca yapılandırılmamış günlüğe kaydetmeye izin verir ve hangi günlük iletilerinin etkinleştirildiğini seçmek veya farklı bir havuza yeniden hedeflemek için yapılandırma desteği yoktur. ILogger veya İzleme API'lerini konsol havuzuyla kullanmak çok fazla çaba harcamaz ve günlüğü yapılandırılabilir durumda tutar.
DiagnosticSource
System.Diagnostics.DiagnosticSource günlük iletilerinin herhangi bir depolama alanına seri hale getirmek yerine zaman uyumlu bir şekilde işlem içinde çözümlendiği günlüğe kaydetmeye yöneliktir. Bu, kaynak ve dinleyicinin rastgele .NET nesnelerini ileti olarak değiştirmesine olanak tanırken, günlük API'lerinin çoğu günlük olayının serileştirilebilir olmasını gerektirir. Bu teknik son derece hızlı olabilir ve dinleyici verimli bir şekilde uygulandığında günlük olaylarını onlarca nanosaniyede işleyebilir. Api burada herhangi bir kısıtlama getirmese de, bu API'leri kullanan araçlar genellikle işlem içi profil oluşturucular gibi davranır.
EventLog
System.Diagnostics.EventLog yalnızca Windows EventLog'a ileti yazan bir Windows API'dir. Çoğu durumda, Windows üzerinde çalışırken ILogger'ı isteğe bağlı bir EventLog havuzuyla kullanmak, uygulamayı Windows işletim sistemine sıkı bir şekilde bağlamadan benzer işlevler verebilir.
Günlük terminolojisi
Yapılandırılmış ve yapılandırılmamış günlük kaydı
Günlüğe kaydetme yapılandırılmış veya yapılandırılmamış olabilir:
- Yapılandırılmamış: Günlük girdileri, insanların okuyabileceği serbest biçimli metin olarak kodlanır, ancak program aracılığıyla ayrıştırmak ve sorgulamak zordur.
- Yapılandırılmış: Günlük girdileri iyi tanımlanmış bir şemaya sahiptir ve farklı ikili ve metin biçimlerinde kodlanabilir. Bu günlükler, hem insanların hem de otomatik sistemlerin onlarla kolayca çalışabilmesi için makine çevrilebilir ve sorgulanabilir olacak şekilde tasarlanmıştır.
İyi yapılandırılmış günlük API'leri, kullanım karmaşıklığında yalnızca küçük bir artışla daha fazla işlevsellik ve performans sunabilir.
Lavabo
Günlük API'lerinin çoğu günlük iletilerinin havuz olarak adlandırılan farklı hedeflere gönderilmesine izin verir. Bazı API'ler çok sayıda önceden hazırlanmış havuza sahipken, bazılarının yalnızca birkaçı vardır. Önceden oluşturulmuş havuz yoksa, genellikle özel bir havuz yazmanıza olanak sağlayan bir genişletilebilirlik API'si vardır, ancak bu işlem biraz daha fazla kod yazmayı gerektirir.