【问题标题】:Call method after Logging .Net 5Logging .Net 5 后的调用方法
【发布时间】:2020-11-19 14:34:12
【问题描述】:

我有一个 .Net Worker 程序,它使用多个将信息记录到 ILogger 的 NuGet 包。对于每个 NuGet 包,我都委派了相同的“主”记录器对象。对于每个日志信息,我现在想获取并发送到我们的内部聊天。我试图创建一个事件,每次将新字符串添加到 ILogger 时都会执行“CallMeWhenLog”方法。

public class TestClass
{
   
    private readonly ILogger<TestClass> _logger;
    public TestClass(ILogger<TestClass> logger)
    {
        _logger = logger;
    }

    public async Task Process(Message message, 
        CancellationToken cancellationToken = default)
    {
       _logger.LogInformation("New message!");
       _logger.LogError("New message!", ex);
    }
    
    public void CallMeWhenLog(string loggedMessage) 
    {
       var chatHandler = new ChatHandler();
       chatHandler.SendMessage(loggedMessage);
    }
}

我认为可以通过创建对 ILogger 的订阅来实现,但我以前从未使用过事件。这听起来很简单,但我有点迷茫。例如,我想在 _logger.LogInformation 和 _logger.LogError 执行后调用“CallMeWhenLog”方法。

【问题讨论】:

  • ILogger 的实施是您自己的还是第三方的?
  • 是我自己的。我在默认 Program.cs 中启动 ILogger,如下所示: public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureLogging((hostingContext, logging) => { logging.AddConfiguration(hostingContext.Configuration.GetSection ("记录")); logging.AddConsole(); logging.AddDebug(); logging.AddEventLog(); }) }

标签: c# .net logging events


【解决方案1】:

来自your comment,您似乎正在使用 (ASP).NET Core。

您可能想要创建自己的 Logger - docs,并像其他三个日志记录提供的一样注册它(例如 logging.AddEventLog())。您可以在该自定义记录器中实现发布到聊天。

或查看第 3 方提供商:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/logging/?view=aspnetcore-5.0#third-party-logging-providers

【讨论】:

  • 将 CustomLoggerProvider 添加到 ConfigureLogging 完成了一项工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多