我正在试图弄清楚如何处理CQRS设置中的日志记录。情况如下:
Foo.Events
,其中事件从EventArgs
继承(不确定原因),相应地,代理期望所有事件都从此类继承。现在,我正在试图找出如何适应日志记录。在CQRS中,在我看来,日志记录本身不是事件,而是系统对事件的响应。另一方面,日志请求看起来像命令,即CQRS中的C.
我想以某种方式将它放入活动经纪人,但我不确定。无论如何,命令都属于事件代理,我们是否可以假设代理只是一些消息系统而不关心它是C还是Q?
非常感谢您的帮助!
答案 0 :(得分:2)
在不同的上下文中以不同的方式记录日志。在CQRS中,域事件的存储可以被视为审计日志。您还可以使用记录技术系统事件的应用程序/基础结构日志记录。这些通常存储在不同的地方,并且通常只写。在.NET上,log4net或NLog等框架用于处理技术系统事件的日志记录。您可以为这些框架创建基于Rx的实现,但这可能会增加不必要的复杂性。
此外,您当然可以将日志消息放在消息队列中,但我不确定您将从中获得什么。事件经纪人是否有进行中的代理或分发?如果是后者,那么除非绝对必要,否则我会远离它。
答案 1 :(得分:2)
记录是一项基础设施问题。命令和事件(通常)与业务相关。记录只在必要时发生,技术实现由您决定。它既不是命令,也不是事件。它记录了其中一个已经发生。实际上,您甚至可能希望记录某些查询。
您可以将事件存储在事件日志中(甚至存储在事件存储中)并将其用作日志。如果需要记录命令和/或某些查询,还可以使用日志记录处理程序包装命令和查询处理程序。