来自IHostedService

时间:2019-05-18 21:36:18

标签: c# logging .net-core

我有一个实施.Net Core托管模式的项目。

所以我有一个主机生成器:

public static async Task Main(string[] args)
    {
        var builder = new HostBuilder()
 .ConfigureAppConfiguration((hostingContext, config) =>
 {
 ...
 })
 .ConfigureServices((hostContext, services) =>
 {
     services.AddSingleton<IHostedService, SkillsService>();
 })
 .ConfigureLogging((hostingContext, logging) =>
 {
logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
     logging.AddConsole();
 });

        await builder.RunConsoleAsync();
    }

和服务:

public class SkillsService : IHostedService, IDisposable
{
...
public SkillsService(ILogger<SkillsService> logger)
    {
     ...
    }
public async Task StartAsync(CancellationToken cancellationToken)
    {
     ...
    }
public Task StopAsync(CancellationToken cancellationToken)
    {
        ...
    }

    public void Dispose()
    {
        ...
    }
 }

现在,在StartAsync方法中,我想从我自己的库中创建一个类的实例,并且该类也正在实现ILogger接口。因此,我需要使用IHostBuilder的配置创建Logger的新实例,但类别要与该库的完整名称空间名称匹配,然后将此类logger注入类。我发现了很多有关创建新LoggerFactory实例并对其进行配置的信息,但是我想重用HostBuilder已经设置的实例。我应该怎么做? IHostedService内部没有LoggerFactory。

对于日志记录,我使用的是Microsoft.Extensions.Logging命名空间。

感谢您的任何建议。

乔治

1 个答案:

答案 0 :(得分:0)

据我所知,我不得不安装一些块以增强Microsoft.Extensions.Logging

  • Serilog
  • Serilog.Extensions.Logging

,如果要将日志存储到文件中

  • Serilog.Extensions.Logging.File

让我知道是否可以解决您的问题。

致谢。