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

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

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

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:

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:

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

Ayrıca bkz.

  • .NET'te oturum açma.
  • .NET'te özel bir günlük sağlayıcısı uygulayın.
  • .NET'te yüksek performanslı günlük kaydı.