.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 sağlayıcı dışında Console
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'da depolar. Birden fazla sağlayıcı etkinleştirilebilir.
Varsayılan .NET Çalışanı uygulama şablonları:
- Genel Konak kullanır.
- Aşağıdaki günlük sağlayıcılarını ekleyen çağrısı CreateApplicationBuilderyapın:
- Konsol
- Hata Ayıklama
- EventSource
- EventLog (yalnızca 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 sınıfı gösterir Program
. Sonraki birkaç bölümde Genel Ana Bilgisayar kullanan .NET Çalışanı uygulama şablonlarına dayalı örnekler sağlanır.
tarafından Host.CreateApplicationBuilder
eklenen varsayılan günlük sağlayıcıları kümesini geçersiz kılmak için, çağırın ClearProviders
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ısı yapar.
- Konsol 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ğımlı bir hizmet yapılandırma
ILogger<T>
bağımlılığı olan bir hizmet yapılandırmak için oluşturucu eklemeyi 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ğlanmış bir ILogger<T>
örneği gerektiren bir hizmet düşünün:
HostApplicationBuilder builder = Host.CreateApplicationBuilder(args);
builder.Services.AddSingleton<IExampleService>(
container => new DefaultExampleService
{
Logger = container.GetRequiredService<ILogger<IExampleService>>()
});
Yukarıdaki kod, DI kapsayıcısının bir örneğini oluşturması için ilk kez çalışan bir Func<IServiceProvider, IExampleService> kodudurIExampleService
. Kayıtlar hizmetlerin herhangi birine bu yolla 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ı günlüklerin çıkışını konsola yönlendirir.
Hata Ayıklama
SağlayıcıDebug
, özellikle yöntemi aracılığıyla Debug.WriteLine ve yalnızca hata ayıklayıcı eklendiğinde sınıfını kullanarak System.Diagnostics.Debug günlük çıktısı yazar. , DebugLoggerProvider arabirimini uygulayan ILogger
bir günlükçü sınıfının örneklerini oluşturur.
Olay Kaynağı
EventSource
sağlayıcısı Microsoft-Extensions-Logging
adıyla bir platformlar arası olay kaynağına yazar. Windows'da sağlayıcı ETW kullanır.
dotnet trace aracı
dotnet-trace aracı, çalışan işlemin .NET Core izlemelerini toplamaya olanak tanıyan, platformlar arası bir CLI genel aracıdır. Araç bir LoggingEventSource kullanarak Microsoft.Extensions.Logging.EventSource sağlayıcı verilerini toplar.
Yükleme yönergeleri için bkz. dotnet-trace. kullanan dotnet-trace
bir tanılama öğreticisi için bkz . .NET Core'da yüksek CPU kullanımında hata ayıklama.
Windows EventLog
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ısı varsayılan sağlayıcı dışı ayarları devralmaz. EventLog
günlük ayarları belirtilmezse, varsayılan olarak LogLevel.Warning
kullanılır.
LogLevel.Warning düzeyinden daha düşük düzeyli olayları günlüğe kaydetmek için günlük düzeyini açıkça ayarlayın. Aşağıdaki örnek Olay Günlüğü varsayılan günlük düzeyini LogLevel.Information olarak ayarlar:
"Logging": {
"EventLog": {
"LogLevel": {
"Default": "Information"
}
}
}
AddEventLog aşırı yüklemeleriEventLogSettings içinde geçirilebilir. null
belirtilirse veya hiç belirtilmezse aşağıdaki varsayılan ayarlar kullanılır:
LogName
: "Uygulama"SourceName
: ".NET Çalışma Zamanı"MachineName
: Yerel makine adı kullanılır.
Aşağıdaki kod varsayılan değeri ".NET Runtime"
olan SourceName
ayarını 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 günlükleri Azure App Service uygulamasının dosya sistemindeki metin dosyalarına ve bir Azure Depolama hesabındaki blob depolamasına 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 AzureBlobLoggerOptions kullanı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 bu ayarları Azure portaldaki App Service sayfasının App Service günlükleri bölümünde kullanır. Aşağıdaki ayarlar güncelleştirildiğinde, uygulamanın yeniden başlatılması veya yeniden dağıtılması gerekmeden değişiklikler hemen geçerlilik kazanır.
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 varsayılan saklanan 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 akışı
Azure günlük akışı, günlük etkinliğinin gerçek zamanlı olarak görüntülenmesini destekler:
- Uygulama sunucusu
- Web sunucusu
- Başarısız istek izlemesi
Azure günlük akışını yapılandırmak için:
- Uygulamanın portal sayfasından App Service günlükleri sayfasına gidin.
- Application Logging (Dosya Sistemi) seçeneğini Açık olarak ayarlayın.
- Günlük Düzeyini seç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. Günlüğe kaydedilen iletiler 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, web uygulamasını izleyen ve telemetri verilerini sorgulamak ve analiz etmek 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 edinmek için aşağıdaki kaynaklara bakın:
- Application Insights'a genel bakış
- .NET Core ILogger günlükleri için ApplicationInsightsLoggerProvider: Application Insights telemetrisinin kalanı olmadan günlük sağlayıcısını uygulamak istiyorsanız buradan başlayın.
- Application Insights günlük bağdaştırıcıları.
- Application Insights SDK'sını yükleme, yapılandırma ve başlatma: Microsoft Learn sitesinde bulunan etkileşimli öğretici.
Günlüğe kaydetme sağlayıcısı tasarımında dikkat edilmesi gerekenler
Arabiriminin kendi uygulamasını ve ilgili özel uygulamasını ILoggergeliştirmeyi ILoggerProvider planlıyorsanız aşağıdaki noktaları göz önünde bulundurun:
- ILogger.Log yöntemi zaman uyumlu.
- Günlük durumunun ve nesnelerin ömrü varsayılmamalıdır.
uygulaması ILoggerProvider
yöntemi aracılığıyla ILoggerProvider.CreateLogger bir ILogger
oluşturur. Uygulamanız günlük iletilerini engelleyici olmayan bir şekilde kuyruğa almak için çabalarsa, önce iletilerin gerçekleştirilmesi veya günlük girdisini oluşturmak için kullanılan nesne durumunun seri hale getirilmesi gerekir. Bunun yapılması, atılan nesnelerin olası özel durumlarını önler.
Daha fazla bilgi için bkz . .NET'te ö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 günlük çerçeveleri şunlardır:
- elmah.io (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 yapılandırılmış günlük olarak da bilinen anlamsal günlük gerçekleştirebilir.
Üçüncü taraf bir çerçeveyi kullanmak, yerleşik sağlayıcılardan birini kullanmaya benzer:
- Projenize bir NuGet paketi ekleyin.
- Günlük çerçevesi tarafından sağlanan bir
ILoggerFactory
veyaILoggingBuilder
uzantısı yöntemini ç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.