c# - 从 Main 开始的类中的 iLogger
问题描述
与 iLogger 斗争。对我来说,目前尚不清楚如何在 Web 控制器旁边实例化日志实例。
主要我正在上演一个“版本监视器”:
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 很好地集成,以便获得注入的记录器。检查文档。他们甚至有计时器的例子。
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>();
});
推荐阅读
- python - numpy 将嵌套的数组数组查看为一维数组
- regression - model.frame.default 中的错误:可变长度不同(为“(权重)”找到)
- javascript - 如何从 MediaWiki 页面获取可编辑的类别
- python - 将 python3 作为我在 Mac 上用于 Fish shell 的默认 python
- maven - 并行运行时如何防止来自同一存储库的 Jenkins 作业之间的竞争条件
- reactjs - Nextjs中下一页之前的页面转换
- flutter - Flutter:Android:如何从另一个文件调用 setState()?
- python - Python jsonpath-ng:如何从 jsonpath 和值构建 json 文档?
- typescript - 打字稿地图
> “没有重载匹配这个调用”,但我不明白为什么? - javascript - 笑话测试-TypeError:无法读取 null 的属性“过滤器”