自定义Serilog水槽与注入?
本文介绍了自定义Serilog水槽与注入?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我创建了一个简单的Serilog接收器项目,如下所示:
消费微服务如下启动:
appsettings.json的serilog部分如下所示:
添加MQSink项目作为对微服务项目的引用,我可以看到MQSink DLL最终位于bin文件夹中。
问题是在执行_logger.LogInformation(...)在微服务中,发送永远不会被触发,但如果我添加一个控制台接收器,它会输出数据吗?我还怀疑注入的MQ无法正常工作?如何解决此问题?
编辑:
打开Serilog内部日志,可以看到找不到MessageQueueSink方法。我没有找到任何使用appsetings.json的方法,所以我开始研究如何在代码中绑定它。要使其正常工作,需要创建一个扩展:
这使得可以按如下方式添加自定义接收器:
加载了自定义接收器并触发了发出,但我仍然不知道如何将MQ注入接收器中?如果我能在appsettings.json文件中完成Serilog和接收器的所有配置,那就更好了。
推荐答案
@pfx帮助我如何加载Serilog定制接收器,为此我给了他赏金,谢谢!然而,这并不是我的最终解决方案。
依赖项注入意味着类的构造函数将接受必要的对象作为参数。虽然无法使用构造函数参数加载自定义接收器,但必须通过该服务来完成。
问题是MQ控制器类注入了ILogger,这创建了一个循环引用,从而导致释放。MQ控制器是共享的,所以我不能对其进行太多更改,但我可以将所需的方法设置为静态的。而不是使用本地MQ对象,而是将它们发送到方法中。
但是,我无法删除MS ILogger要求,并且我仍然需要能够在自定义接收器中进行日志记录。因此,首先我创建了一个如下所示的Serilog:然后可以将此记录器包装在MS Ilogger类中,并将其发送到静态生产者方法:
若要配置接收器,我必须在appsettings.json文件中创建自定义接收器设置部件,然后将其读取到设置对象中。
终于成功了!
这篇关于自定义Serilog水槽与注入?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!