在 iLogger 上遇到困难。对我来说,目前尚不清楚如何在 Web Controller 之外实例化日志记录实例。
主要是我正在上演“版本监视器”:
public static void Main(string[] args)
{
IWebHostEnvironment env;
VersionMonitor vControl = new VersionMonitor();
CreateHostBuilder(args).Build().Run();
}
在版本监视器构造函数中,我正在启动一个计时器:
public VersionMonitor()
{
Timer timer = new Timer();
timer.Interval = UpInterval;
timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
timer.Enabled = true;
}
我现在想做的就是记录某事。在经过的计时器事件内:
static void timer_Elapsed(object sender, ElapsedEventArgs e)
{
//how to?
ILogger<timer_Elapsed> _logger;
logger.LogInformation("Message");
}
您能指导我如何做到这一点吗?
提前致谢。
最佳答案
而不是直接实例化您的类...查看官方托管服务。他们应该与 DI 很好地集成,这样他们就可以获得注入(inject)的记录器。检查the documentation 。他们甚至还有带有计时器的示例。
public class VersionMonitor: IHostedService, IDisposable
{
ILogger<VersionMonitor> _logger;
Timer _timer;
public VersionMonitor(ILogger<VersionMonitor> logger)
{
_logger = logger;
_timer = new Timer();
_timer.Interval = UpInterval;
_timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
}
public Task StartAsync(CancellationToken cancellationToken)
{
_timer.Enabled = true;
}
void timer_Elapsed(object sender, ElapsedEventArgs e)
{
_logger.LogInformation("Message");
}
public void Dispose()
{
_timer?.Dispose();
}
}
然后将其连接起来:
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
})
.ConfigureServices(services =>
{
services.AddHostedService<VersionMonitor>();
});
关于c# - 从 Main 开始的类中的 iLogger,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65112938/