Profiling of sequential workflows

As a developer i need to know how much time each block of workflow consumed so that I can identify a bottle neck of an application

I imagine an output as a log4net logs produced by a new logger (can be separated to a special log file by a log4net config)

Each workflow step/workflow block/whole workflow will be measured. An example of output row (draft):

WF: <workflow wf/task/block name with full path as in trace-workflow funcitonality>, time spent: <time spent (ms with sub ms precision)>

Other information can be added by log4net configuration (time of log, thread, etc.)

If it is not used, it shouldn’t slow down an application in more than neglegtable way. So it can be controlled either by log4net ‘logger.isDebugEnabled()’, or by preprocessor macros, or both. But at the end, logger.isDebugEnables() is good enugh but probably the solution can’t be finished by ‘using’ strategy

Done. Duration of Workflow steps, blocks and whole workflows can be written to a special log file. To switch the logging on/off edit log level of “WorkflowProfiling” logger in AsapArchitect.exe.config. To switch the logging on, set it to DEBUG, to switch off set it to INFO.

See new config file fragments below:

<logger name="WorkflowProfiling" additivity="false">
    <level value="DEBUG" />
    <appender-ref ref="WorkflowProfilingFileAppender" />
  <appender name="WorkflowProfilingFileAppender" type="log4net.Appender.RollingFileAppender">
    <file value="./origam-WorkflowProfiling.log" />
    <appendToFile value="true" />
    <rollingStyle value="Size" />
    <maxSizeRollBackups value="5" />
    <maximumFileSize value="10MB" />
    <staticLogFileName value="true" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date - %message%newline" />