Search code examples
c#stateless-state-machine

How to log state transitions in Stateless (.NET state machine library)


I would like to have a log in database of state transitions of my workflow.

Where is the best place to trigger logging with Stateless? Should it be set-up for each State configuration :

phoneCall.Configure(State.Connected)
    .OnEntry(() => StartCallTimer())
    .OnEntry(() => Log());

or there is some way to define it centrally for whole workflow once?

Any other input in this regard is welcome.


Solution

  • You can use the OnTransitioned trigger that will be fired on every transition as central logging facility.

    _stateMachine.OnTransitioned(OnTransitionedAction);
    
    void OnTransitionedAction(StateMachine<StateEnum, TriggerEnum>.Transition transition) {
        TriggerEnum trigger = transition.Trigger;
        StateEnum source = transition.Source;
        StateEnum dest = transition.Destination;
        // log trigger, source, destination
    }