-
Notifications
You must be signed in to change notification settings - Fork 7
Component Execution Status
Marty Mathis edited this page Aug 27, 2020
·
10 revisions
###Example usage with Serilog:
using PipelineFramework.Abstractions;
using Serilog;
using System.Diagnostics.CodeAnalysis;
using System.Threading.Tasks;
namespace PipelineFramework.Core.Examples
{
[ExcludeFromCodeCoverage]
public class ExecutionStatusReceiver : IAsyncPipelineComponentExecutionStatusReceiver
{
private readonly ILogger _logger;
public ExecutionStatusReceiver(ILogger logger)
{
_logger = logger;
}
public Task ReceiveExecutionStartingAsync(PipelineComponentExecutionStartingInfo executionInfo)
{
var logger = EnrichLogger(_logger, executionInfo.Payload);
logger.Information(
"Component '{PipelineComponentName}' execution starting at {TimeStamp}",
executionInfo.PipelineComponentName,
executionInfo.TimeStamp.ToShortTimeString());
return Task.CompletedTask;
}
public Task ReceiveExecutionCompletedAsync(PipelineComponentExecutionCompletedInfo executionInfo)
{
var logger = EnrichLogger(_logger, executionInfo.Payload);
if (executionInfo.Exception == null)
{
logger.Information(
"Component '{PipelineComponentName}' execution completed at {TimeStamp}. Duration: {TotalMilliseconds}ms",
executionInfo.PipelineComponentName,
executionInfo.TimeStamp.ToShortTimeString(),
executionInfo.ExecutionTime.TotalMilliseconds);
}
else
{
logger.Error(
executionInfo.Exception,
"Component '{PipelineComponentName}' execution failed at {TimeStamp}. Duration: {TotalMilliseconds}ms",
executionInfo.PipelineComponentName,
executionInfo.TimeStamp.ToShortTimeString(),
executionInfo.ExecutionTime.TotalMilliseconds);
}
return Task.CompletedTask;
}
private static ILogger EnrichLogger(ILogger logger, object payload) =>
payload is ExamplePipelinePayload p
? logger.ForContext("FooKey", p.FooKey).ForContext("Result", p.Result)
: logger;
}
}