【发布时间】: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(); }) }