如何在cqrs上下文中正确处理日志记录?

时间:2013-07-11 20:15:03

标签: logging domain-driven-design messaging cqrs

我正在试图弄清楚如何处理CQRS设置中的日志记录。情况如下:

  • 我有一个基于Rx的活动经纪人。
  • 我有一个项目Foo.Events,其中事件从EventArgs继承(不确定原因),相应地,代理期望所有事件都从此类继承。
  • 我有几个子系统(用DI初始化)发布到日志中。
  • 我需要几个子系统来处理日志记录请求并相应地处理它们(在屏幕上显示,发送xmpp / sms /无论如何)

现在,我正在试图找出如何适应日志记录。在CQRS中,在我看来,日志记录本身不是事件,而是系统对事件的响应。另一方面,日志请求看起来像命令,即CQRS中的C.

我想以某种方式将它放入活动经纪人,但我不确定。无论如何,命令都属于事件代理,我们是否可以假设代理只是一些消息系统而不关心它是C还是Q?

非常感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

在不同的上下文中以不同的方式记录日志。在CQRS中,域事件的存储可以被视为审计日志。您还可以使用记录技术系统事件的应用程序/基础结构日志记录。这些通常存储在不同的地方,并且通常只写。在.NET上,log4net或NLog等框架用于处理技术系统事件的日志记录。您可以为这些框架创建基于Rx的实现,但这可能会增加不必要的复杂性。

此外,您当然可以将日志消息放在消息队列中,但我不确定您将从中获得什么。事件经纪人是否有进行中的代理或分发?如果是后者,那么除非绝对必要,否则我会远离它。

答案 1 :(得分:2)

记录是一项基础设施问题。命令和事件(通常)与业务相关。记录只在必要时发生,技术实现由您决定。它既不是命令,也不是事件。它记录了其中一个已经发生。实际上,您甚至可能希望记录某些查询。

您可以将事件存储在事件日志中(甚至存储在事件存储中)并将其用作日志。如果需要记录命令和/或某些查询,还可以使用日志记录处理程序包装命令和查询处理程序。

相关问题