Reputation: 2979
I have a task to add logging functionality to the existing workflow based solution. There is a layered architecture : BusinessLayer->AgentLayer->StoreLayer. At the business layer there is a xaml activity which consists from a one or more agent activities. Agent activity consists from one or more store activities. Agent and Store activities are inherited from CodeActivity.
Activities are executed by
WorkflowInvoker.Invoke(activity);
My task is to log the execution of each activity. The log output. should be e.g.
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
So my question is what is the best practise to log something like this. I don't want to write the LogMessage to the each activity. I prefer the unified solution. Is there exists any clever solutions?
thanks
Upvotes: 2
Views: 3171
Reputation: 31651
WF already supports a logging structure which it calls WF Tracking. You would be wise to just follow the existing infrastructure so you don't incur any unnecessary performance overhead.
You need to look at how to incorporate TrackingParticipants
. You will need to replace the WorkflowInvoker.Invoke()
with WorkflowApplication
(or create an instance of WorflowInvoker
) so that you can add your custom TrackingParticipant
via WF Extensions. By defining a TrackingProfile
you can restrict the tracking messages to only those which you are interested by trace level, event type, and tracking record.
If you wish to log your own custom TrackingRecords
, you can derive from the base TrackingRecord
.
Alternatively - you could build a wrapping custom activity as suggested by @Gabocat, but this will incur additional performance overhead that WF Tracking would not.
Upvotes: 3