將日志(Microsoft.Extensions.Logging)添加到.NET Core控制台應用程序


在.NET Core項目中,日志記錄是通過依賴項注入進行管理的。 盡管這對於ASP.NET項目效果很好,但在啟動Startup.cs中的新項目時,所有這些都會自動創建,而在控制台應用程序中則需要一些配置才能使其啟動並運行。

這大部分是從此處的博客文章整理而成的,但我對其進行了修改。

該項目是在Visual Studio 2019中創建的,並且需要以下程序包(在csproj文件中找到)

<ItemGroup>
    <PackageReference Include="Microsoft.Extensions.Configuration" Version="3.1.0" />
    <PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="3.1.0" />
    <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="3.1.0" />
    <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="3.1.0" />
    <PackageReference Include="Microsoft.Extensions.Logging" Version="3.1.0" />
    <PackageReference Include="Microsoft.Extensions.Logging.Console" Version="3.1.0" />
    <PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="3.1.0" />
  </ItemGroup>

 

該項目中的業務邏輯在服務中得到處理,而Program.cs用於引導運行應用程序所需的一切。 需要在app-settings.json的“ ConnectionStrings”部分中添加一個“Logging”配置,該條目可以像這樣添加到控制台應用程序中。

app-settings.json

{
  "Logging": {
    "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
    },
    "Console": {
      "IncludeScopes": true
    }
  }
}

 

Program.cs

  public class Program
    {
        public static void Main(string[] args)
        {
            var serviceCollection = new ServiceCollection();
            ConfigureServices(serviceCollection);
            var serviceProvider = serviceCollection.BuildServiceProvider();
            var run = serviceProvider.GetService<App>();
            if (run != null)
                run.Run();
            else
                System.Console.WriteLine("Init Error");
        }


        private static void ConfigureServices(IServiceCollection services)
        {
            var configuration = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("app-settings.json", false)
                .Build();

            services.AddLogging(loggingBuilder =>
            {
                loggingBuilder.AddConfiguration(configuration.GetSection("Logging"));
                loggingBuilder.AddConsole();
                loggingBuilder.AddDebug();
            });

            // Add access to generic IConfigurationRoot
            services.AddSingleton(configuration);

            // Add services
            services.AddTransient<IBackupService, BackupService>();

            // Add app
            services.AddTransient<App>();
        }
    }

 

App.cs

   public class App
    {
        private readonly IBackupService _backupService;
        private readonly ILogger<App> _logger;
        private readonly IConfigurationRoot _config;

        public App(ILogger<App> logger, IBackupService backupService, IConfigurationRoot config)
        {
            _logger = logger;
            _backupService = backupService;
            _config = config;
        }

        public void Run()
        {
            _logger.LogInformation($"Running application.");
            _backupService.Run();
            System.Console.ReadKey();

        }
    }

 

BackupService.cs

  public interface IBackupService
    {
        void Run();
    }

 public class BackupService : IBackupService
    {
        private readonly ILogger<BackupService> _logger;
        private readonly IConfigurationRoot _config;

        public BackupService(ILogger<BackupService> logger, IConfigurationRoot config)
        {
            _logger = logger;
            _config = config;
        }

        public void Run()
        {
            _logger.LogDebug($"Running backup service.");
        }
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM