.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. ILoggerhı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. EventSourceETW 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 programlı olarak 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.