如何记录工作流基础活动

时间:2012-02-08 12:55:15

标签: logging workflow-foundation

我有一项任务是将记录功能添加到现有的基于工作流的解决方案中。有一个分层架构:BusinessLayer-> AgentLayer-> StoreLayer。在业务层,有一个xaml活动,它由一个或多个代理活动组成。代理活动由一个或多个商店活动组成。代理和商店活动继承自CodeActivity。

活动由

执行
WorkflowInvoker.Invoke(activity);

我的任务是记录每项活动的执行情况。日志输出。应该是例如。

BusinessActivity1 has been started at 11:00 8.2.2012
AgentActivity1 has been started at 11:01 8.2.2012
StoreActivity1 has been started at 11:02 8.2.2012
StoreActivity1 has been ended at 11:03 8.2.2012
AgentActivity1 has been ended at 11:04 8.2.2012
BusinessActivity1 has been ended at 11:05 8.2.2012

所以我的问题是记录这样的事情的最佳做法是什么。我不想将LogMessage写入每个活动。我更喜欢统一的解决方案。有没有聪明的解决方案?

感谢

1 个答案:

答案 0 :(得分:2)

WF已经支持一个名为WF Tracking的日志记录结构。您可以明智地遵循现有的基础架构,这样就不会产生任何不必要的性能开销。

您需要了解如何合并TrackingParticipants。您需要将WorkflowInvoker.Invoke()替换为WorkflowApplication或创建WorflowInvoker 的实例),以便您可以通过{添加自定义TrackingParticipant {3}}。通过定义WF Extensions,您可以将跟踪消息限制为仅跟踪级别,事件类型和跟踪记录感兴趣的消息。

如果您希望记录自己的自定义TrackingProfile,则可以从基础TrackingRecord派生。

或者 - 您可以按照@Gabocat的建议构建一个包装自定义活动,但这会产生额外的性能开销,而WF Tracking则不会。