Я пытаюсь внедрить мой Serilog Logger в. Net Стандартный класс библиотеки 2.0 из. NET Core Worker Service Project. Однако всякий раз, когда создается класс SetManager
, он не получает регистратор. (По умолчанию установлено значение null). Поэтому я получаю значение null error всякий раз, когда я пытаюсь использовать регистратор.
Кто-нибудь может помочь? Host Builder ниже
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseWindowsService()
.ConfigureServices((hostContext, services) =>
{
IConfiguration configuration = hostContext.Configuration;
ConfigDto configDto = configuration.GetSection("AppSettings").Get<ConfigDto>();
services.AddSingleton(configDto);
services.AddHostedService<Service>();
})
.UseSerilog();
}
Класс в рабочем проекте, который вызывает SetManager, который является классом в. NET стандартной библиотеке.
public Service(ConfigDto config, ILogger<Service> logger = null)
{
_logger = logger;
_logger.LogTrace("Service object created");
try
{
_logger.LogTrace("Getting config");
_config = config;
}
catch (Exception ex)
{
_logger.LogCritical("Unable to load configuration. Stopping service:\n{0}", ex.Message);
Stop();
}
_setManager = new SetManager(_config);
_setManager.ReadyToProcess += SetManager_ReadyToProcess;
}
Конструктор SetManager
public SetManager(ConfigDto config, ILogger<SetManager> logger = null)
{
_logger = logger;
_config = config;
_productList = GetProducts();
_timer.Interval = 3000;
_timer.Elapsed += Timer_Elapsed;
}
Пакеты
<PackageReference Include="Serilog.Enrichers.Thread" Version="3.1.0" />
<PackageReference Include="Serilog.Extensions.Hosting" Version="3.0.0" />
<PackageReference Include="Serilog.Sinks.Console" Version="3.1.1" />
<PackageReference Include="Serilog.Sinks.File" Version="4.1.0" /> `
Класс Service
получает штраф, введенный регистратором. Это класс SetManager
, который не получает регистратор.
Настройка Serilog Logger в методе Main.
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Verbose()
.MinimumLevel.Override("Microsoft", LogEventLevel.Warning)
.Enrich.With(new ThreadIdEnricher())
.Enrich.FromLogContext()
.WriteTo.Console(LogEventLevel.Verbose, loggerTemplate, theme: AnsiConsoleTheme.Literate)
.WriteTo.File(logfile, LogEventLevel.Verbose, loggerTemplate, rollingInterval: RollingInterval.Day, retainedFileCountLimit: 90)
.CreateLogger();