0

我开始创建基于 Observable Pattern 的日志系统。为此,我使用反应式扩展。我有一个名为 ILogInfo 的 IObservable 和一个名为 ILogObserver 的 IObserver。我有一个主应用程序,其中包含使用共享库的各种模块。每个模块都实现了 ILogInfo 的观察者,并且模块可以并行工作。我的问题是,我只想观察在我的模块范围内注册的 ILogInfo。

方案申请

在这个方案中,我有两个模块(模块 A 和模块 B),每个模块使用许多通过 ILogInfo 推送信息的库。当 LibC 推送一个新的 ILogInfo 时,我希望只有调用模块捕获(观察)信息。例如,当呼叫来自模块 B 时,我没有模块 A 观察到的信息。我该怎么做?

4

2 回答 2

1

这真的不是关于 Rx 的问题。您需要能够从 ILogInfo 获取调用上下文以适当地路由它。

您可以从调用者明确提供该上下文(评论中的发送者建议似乎是一个简单、可行的建议),或者执行昂贵的堆栈遍历来确定调用模块(在异步情况下不起作用)或其他您必须通过在LogicalCallContext中设置数据来维护 ExecutionContext 中的调用者- 这适用于更多异步情况但更复杂。

我不知道您的具体情况,但鉴于需要彻底隔离日志记录,我想知道在单独的每个模块 AppDomains 中托管多个库副本是否更容易,让您完全隔离。

我希望这个要求有一个很好的理由,因为当现有的日志框架有很好的解决方案来提供上下文时感觉非常复杂(比如在日志应用程序块和 WCF 中的活动跟踪)。

于 2013-10-16T10:27:28.580 回答
0

我同意詹姆斯的观点。这不是一个真正的 Rx 问题。

我还有一个问题,您将如何处理许多模块引用同一库的日志记录?

您是否有理由不考虑使用像 Log4Net 这样的通用日志记录解决方案?

于 2013-10-16T20:06:21.870 回答