【问题标题】:How is logging properly handled in cqrs context?如何在 cqrs 上下文中正确处理日志记录?
【发布时间】:2013-07-11 20:15:02
【问题描述】:

我试图弄清楚如何处理登录 CQRS 设置。情况如下:

  • 我有一个基于 Rx 的事件代理。
  • 我有一个项目Foo.Events,其中事件从EventArgs 继承(不知道为什么),因此代理希望所有事件都从此类继承。
  • 我有几个子系统(使用 DI 初始化)发布到日志中。
  • 我需要几个子系统来处理日志记录请求并相应地处理它们(显示在屏幕上,发送 xmpp/sms/whatever)

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

我很想以某种方式将其放入事件代理中,但我不确定。无论如何,命令是否属于事件代理,我们是否可以假设代理只是一些消息系统,并不真正关心它是 C 还是 Q?

非常感谢您的帮助!

【问题讨论】:

    标签: logging domain-driven-design messaging cqrs


    【解决方案1】:

    日志记录是一个基础设施问题。命令和事件(通常)与业务相关。记录只会在必要时进行,技术实施取决于您。它既不是命令也不是事件。它记录其中之一已经发生。事实上,您甚至可能想要记录某些查询。

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

    【讨论】:

      【解决方案2】:

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

      此外,您当然可以将日志消息放在消息队列中,但我不确定您会从中得到什么。您的事件代理是进程内代理还是分布式的?如果是后者,那么除非绝对必要,否则我会避开它。

      【讨论】:

      • 经纪人目前正在处理中,不确定是否会一直如此。
      猜你喜欢
      • 2011-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-04
      • 2010-10-11
      • 2017-05-23
      • 2020-01-14
      相关资源
      最近更新 更多