Aracılığıyla paylaş


.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ı:

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.CreateApplicationBuildertarafı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:

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-Loggingolan 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-tracekullanan 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.Warningolur.

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 CustomLogsolarak 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:

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:

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:

  1. Projenize bir NuGet paketi ekleyin.
  2. Loglama çerçevesi tarafından sağlanan bir ILoggerFactory veya ILoggingBuilder 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.