.NET'te günlük sağlayıcıları
Günlük sağlayıcıları, günlükleri yalnızca standart çıkış olarak görüntüleyen Console
sağlayıcısı dışında günlükleri kalıcı hale döndürür. Örneğin, Azure Application Insights sağlayıcısı günlükleri Azure Application Insights'ta depolar. Birden çok sağlayıcı etkinleştirilebilir.
Varsayılan .NET Çalışanı uygulama şablonları:
- Genel Ana Bilgisayarkullanın.
-
CreateApplicationBuilder'ı çağırın, bu da aşağıdaki günlük sağlayıcılarını ekler:
- konsol
- hata ayıklama
- EventSource
- EventLog (sadece Windows)
using Microsoft.Extensions.Hosting;
using IHost host = Host.CreateApplicationBuilder(args).Build();
// Application code should start here.
await host.RunAsync();
Yukarıdaki kod, .NET Çalışanı uygulama şablonlarıyla oluşturulan Program
sınıfını gösterir. Sonraki birkaç bölümde Generic Host kullanan .NET Worker uygulama şablonlarına dayalı örnekler sağlanır.
Host.CreateApplicationBuilder
tarafından eklenen varsayılan günlük sağlayıcıları kümesini geçersiz kılmak için ClearProviders
çağırın ve istediğiniz günlük sağlayıcılarını ekleyin. Örneğin, aşağıdaki kod:
- Oluşturucudan tüm ILoggerProvider örneklerini kaldırmak için ClearProviders çağırır.
- Konsolu günlük sağlayıcısını ekler.
HostApplicationBuilder builder = Host.CreateApplicationBuilder(args);
builder.Logging.ClearProviders();
builder.Logging.AddConsole();
Ek sağlayıcılar için bkz:
ILogger'a bağlı bir hizmet yapılandırma
Bir hizmeti ILogger<T>
'a bağımlı olarak yapılandırmak için oluşturucu enjeksiyonu kullanın veya bir fabrika yöntemi sağlayın. Fabrika yöntemi yaklaşımı yalnızca başka seçenek yoksa önerilir. Örneğin, DI tarafından sağlanan bir ILogger<T>
örneği gerektiren bir hizmeti düşünün:
HostApplicationBuilder builder = Host.CreateApplicationBuilder(args);
builder.Services.AddSingleton<IExampleService>(
container => new DefaultExampleService
{
Logger = container.GetRequiredService<ILogger<IExampleService>>()
});
DI kapsayıcısının bir IExampleService
örneğini oluşturması gerektiğinde, yukarıdaki kod, ilk defa çalışan bir Func<IServiceProvider, IExampleService>'dir. Kayıtlı hizmetlere bu şekilde erişebilirsiniz.
Yerleşik günlük sağlayıcıları
Microsoft Uzantıları, çalışma zamanı kitaplıklarının bir parçası olarak aşağıdaki günlük sağlayıcılarını içerir:
Aşağıdaki günlük sağlayıcıları Microsoft tarafından gönderilir, ancak çalışma zamanı kitaplıklarının bir parçası olarak gönderilmez. Ek NuGet paketleri olarak yüklenmelidir.
Konsol
Console
sağlayıcısı çıkışı konsola kaydeder.
Hata ayıklama
Debug
sağlayıcısı, özellikle Debug.WriteLine yöntemi aracılığıyla ve yalnızca hata ayıklayıcı eklendiğinde System.Diagnostics.Debug sınıfını kullanarak günlük çıktısı yazar.
DebugLoggerProvider, ILogger
arabirimini uygulayan bir günlükçü sınıfının örneklerini oluşturur.
Olay Kaynağı
EventSource
sağlayıcısı, adı Microsoft-Extensions-Logging
olan platformlar arası bir olay kaynağına yazar. Windows'da sağlayıcı ETWkullanır.
dotnet izleme araçları
dotnet-trace aracı, çalışan bir işlemin .NET Core izlemelerinin toplanmasını sağlayan platformlar arası bir CLI genel aracıdır. Araç, LoggingEventSourcekullanarak Microsoft.Extensions.Logging.EventSource sağlayıcı verilerini toplar.
Yükleme yönergeleri için bkz. dotnet-trace .
dotnet-trace
kullanan bir tanılama öğreticisi için bkz. .NET Core yüksek CPU kullanımında hata ayıklama.
Windows Olay Günlüğü
EventLog
sağlayıcısı günlük çıkışını Windows Olay Günlüğü'ne gönderir. Diğer sağlayıcılardan farklı olarak, EventLog
sağlayıcı varsayılan sağlayıcı dışı ayarları devralmaz .
EventLog
günlük ayarları belirtilmezse, varsayılan LogLevel.Warning
olur.
LogLevel.Warning'den düşük olayları kaydetmek için, günlük seviyesini net bir şekilde belirleyin. Aşağıdaki örnek, Olay Günlüğü varsayılan günlük düzeyini LogLevel.Informationolarak ayarlar:
"Logging": {
"EventLog": {
"LogLevel": {
"Default": "Information"
}
}
}
AddEventLog aşırı yüklemeleriEventLogSettingsgeçebilir.
null
veya belirtilmezse, aşağıdaki varsayılan ayarlar kullanılır:
-
LogName
: "Uygulama" -
SourceName
: ".NET Runtime" -
MachineName
: Yerel makine adı kullanılır.
Aşağıdaki kod, SourceName
varsayılan ".NET Runtime"
değerinden CustomLogs
olarak değiştirir:
HostApplicationBuilder builder = Host.CreateApplicationBuilder(args);
builder.Logging.AddEventLog(
config => config.SourceName = "CustomLogs");
using IHost host = builder.Build();
host.Run();
Azure App Service
Microsoft.Extensions.Logging.AzureAppServices sağlayıcı paketi, Azure App Service uygulamasının dosya sistemindeki metin dosyalarına ve bir Azure Depolama hesabındaki blob depolama günlükleri yazar.
Sağlayıcı paketi çalışma zamanı kitaplıklarına dahil değildir. Sağlayıcıyı kullanmak için sağlayıcı paketini projeye ekleyin.
Sağlayıcı ayarlarını yapılandırmak için, aşağıdaki örnekte gösterildiği gibi AzureFileLoggerOptions ve AzureBlobLoggerOptionskullanın:
using Microsoft.Extensions.Logging.AzureAppServices;
HostApplicationBuilder builder = Host.CreateApplicationBuilder(args)
builder.Logging.AddAzureWebAppDiagnostics();
builder.Services.Configure<AzureFileLoggerOptions>(options =>
{
options.FileName = "azure-diagnostics-";
options.FileSizeLimit = 50 * 1024;
options.RetainedFileCountLimit = 5;
});
builder.Services.Configure<AzureBlobLoggerOptions>(options =>
{
options.BlobName = "log.txt";
});
using IHost host = builder.Build();
// Application code should start here.
await host.RunAsync();
Azure App Service'e dağıtıldığında uygulama, Azure portalının App Service sayfasının App Service günlükleri bölümündeki ayarları kullanır. Aşağıdaki ayarlar güncelleştirildiğinde, değişiklikler uygulamanın yeniden başlatılmasına veya yeniden dağıtılma işlemine gerek kalmadan hemen geçerli olur.
Günlük dosyalarının varsayılan konumu D:\home\LogFiles\Application klasöründedir. Ek varsayılanlar sağlayıcıya göre farklılık gösterir:
- Uygulama Günlüğü (Dosya Sistemi): Varsayılan dosya sistemi dosya adı diagnostics-yyyymmdd.txt. Varsayılan dosya boyutu sınırı 10 MB'tır ve tutulan varsayılan dosya sayısı üst sınırı 2'dir.
- Uygulama Günlüğü (Blob): Varsayılan blob adı {app-name}/yyyy/mm/dd/hh/{guid}_applicationLog.txt.
Bu sağlayıcı yalnızca proje Azure ortamında çalıştırıldığında günlüğe kaydeder.
Azure günlük veri akışı
Azure günlük akışı, aşağıdaki kaynaklardan günlük etkinliğinin gerçek zamanlı olarak görüntülenmesini destekler:
- Uygulama sunucusu
- Web sunucusu
- Başarısız istek izleme
Azure günlük akışını yapılandırmak için:
- Uygulamanın portal sayfasından App Service günlükleri sayfasına gidin.
- Uygulama Günlüğü (Dosya Sistemi)'i olarakayarlayın.
- Günlük Düzeyseçin. Bu ayar yalnızca Azure günlük akışı için geçerlidir.
Günlükleri görüntülemek için Günlük Akışı sayfasına gidin. İletiler ILogger
arabirimiyle günlüğe kaydedilir.
Azure Application Insights
Microsoft.Extensions.Logging.ApplicationInsights sağlayıcı paketi, günlükleri Azure Application Insights'a yazar. Application Insights, bir web uygulamasını izleyen ve telemetri verilerini sorgulamak ve çözümlemek için araçlar sağlayan bir hizmettir. Bu sağlayıcıyı kullanıyorsanız, Application Insights araçlarını kullanarak günlüklerinizi sorgulayabilir ve analiz edebilirsiniz.
Daha fazla bilgi için aşağıdaki kaynaklara bakın:
- Application Insights'a genel bakış
- .NET Core ILogger günlükleri için ApplicationInsightsLoggerProvider - Günlük kaydı sağlayıcısını, Application Insights telemetri sistemi olmadan uygulamak istiyorsanız buradan başlayın.
- Application Insights günlük bağdaştırıcıları.
- Microsoft Learn sitesinde Application Insights SDK - Etkileşimli öğreticisini yükleyin, yapılandırın ve başlatın.
Günlüğe kaydetme sağlayıcısı tasarımında dikkat edilmesi gerekenler
ILoggerProvider arabiriminin kendi uygulamasını ve ILoggerilgili özel uygulamasını geliştirmeyi planlıyorsanız aşağıdaki noktaları göz önünde bulundurun:
- ILogger.Log yöntemi eşzamanlı.
- Günlük durumunun ve nesnelerin ömrü varsayılmamalıdır.
ILoggerProvider
uygulaması, ILoggerProvider.CreateLogger yöntemi aracılığıyla bir ILogger
oluşturur. Uygulamanız, günlük iletilerini engellemesiz bir şekilde kuyruğa almaya çalışıyorsa, iletilerin önce oluşturulması veya günlük girdisini oluşturmak için kullanılan nesne durumunun seri hale getirilmesi gerekir. Bu şekilde, imha edilmiş nesnelerden kaynaklanabilecek istenmeyen istisnalar önlenir.
Daha fazla bilgi için bkz. .NET özel günlük sağlayıcısı uygulama.
Üçüncü taraf günlük sağlayıcıları
Çeşitli .NET iş yükleriyle çalışan bazı üçüncü taraf kayıt tutma çerçeveleri şunlardır:
- elmah.io (GitHub deposu)
- EFLogger (GitHub deposu)
- Gelf (GitHub deposu)
- JSNLog (GitHub deposu)
- KissLog.net (GitHub deposu)
- Log4Net (GitHub deposu)
- NLog (GitHub deposu)
- NReco.Logging (GitHub deposu)
- Sentry (GitHub deposu)
- Serilog (GitHub deposu)
- Stackdriver (GitHub deposu)
Bazı üçüncü taraf çerçeveler, anlamsal günlük kaydı, diğer adıylayapılandırılmış günlük kaydı, gerçekleştirebilir.
Üçüncü taraf çerçevesi kullanmak, yerleşik sağlayıcılardan birini kullanmaya benzer:
- Projenize bir NuGet paketi ekleyin.
- Loglama çerçevesi tarafından sağlanan bir
ILoggerFactory
veyaILoggingBuilder
uzantı metodunu çağırın.
Daha fazla bilgi için her sağlayıcının belgelerine bakın. Üçüncü taraf günlük sağlayıcıları Microsoft tarafından desteklenmez.
Ayrıca bkz.
- .NET'te günlük kaydı .
- .NET'te özel bir günlük sağlayıcısı uygulayın.
- .NET'te yüksek performanslı kayıt.