c# - 从 Main 开始的类中的 iLogger

标签 c# asp.net-core ilogger

在 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/

相关文章:

c# - 十六进制值 0x07,是无效字符

c# - 要通过什么?引用对象还是值类型?

Azure Function - ILogger 不记录日志?

c# - AWS lambda如何在.NET Core中创建多部分响应?

c# - 最小 API - 如何在静态类中使用 ILogger

c# - 如何将 curl 请求转换为 HttpClient

asp.net-core - 获取 DevExtreme DropDownBox 选定的值

c# - [40m[32minfo[39m[22m[49m 在 DotNetCore 日志上意味着什么

C# Azure 函数 ILoggerFactory 不使用引用库进行日志记录

c# - 在 C# 中如何获取网格中单元格的内容?