WorkflowForge.Extensions.Logging.Serilog
2.1.1
dotnet add package WorkflowForge.Extensions.Logging.Serilog --version 2.1.1
NuGet\Install-Package WorkflowForge.Extensions.Logging.Serilog -Version 2.1.1
<PackageReference Include="WorkflowForge.Extensions.Logging.Serilog" Version="2.1.1" />
<PackageVersion Include="WorkflowForge.Extensions.Logging.Serilog" Version="2.1.1" />
<PackageReference Include="WorkflowForge.Extensions.Logging.Serilog" />
paket add WorkflowForge.Extensions.Logging.Serilog --version 2.1.1
#r "nuget: WorkflowForge.Extensions.Logging.Serilog, 2.1.1"
#:package WorkflowForge.Extensions.Logging.Serilog@2.1.1
#addin nuget:?package=WorkflowForge.Extensions.Logging.Serilog&version=2.1.1
#tool nuget:?package=WorkflowForge.Extensions.Logging.Serilog&version=2.1.1
WorkflowForge.Extensions.Logging.Serilog
Structured logging extension for WorkflowForge with Serilog integration for rich, queryable logs.
Dependency Isolation
This extension internalizes Serilog with ILRepack. This means:
- Reduced dependency conflicts for Serilog
- Public APIs stay WorkflowForge/BCL only
- Microsoft/System assemblies remain external
Installation
dotnet add package WorkflowForge.Extensions.Logging.Serilog
Requires: .NET Standard 2.0 or later
Quick Start
using WorkflowForge;
using WorkflowForge.Extensions.Logging.Serilog;
var logger = SerilogLoggerFactory.CreateLogger(new SerilogLoggerOptions
{
MinimumLevel = "Information",
EnableConsoleSink = true
});
using var foundry = WorkflowForge.CreateFoundry("MyWorkflow", logger);
Key Features
- Structured Logging: Rich, queryable log data
- Multiple Sinks: Console, File, Elasticsearch, Seq, etc.
- Contextual Properties: Automatic workflow/operation context
- Log Levels: Fine-grained control (Verbose, Debug, Information, Warning, Error, Fatal)
- Performance: Minimal overhead with async logging
- Full Serilog Ecosystem: Access all Serilog sinks and enrichers
Configuration
Programmatic
var logger = SerilogLoggerFactory.CreateLogger(new SerilogLoggerOptions
{
MinimumLevel = "Information",
EnableConsoleSink = true
});
using var foundry = WorkflowForge.CreateFoundry("MyWorkflow", logger);
From appsettings.json
{
"Serilog": {
"MinimumLevel": "Information",
"WriteTo": [
{ "Name": "Console" },
{
"Name": "File",
"Args": {
"path": "logs/workflow-.txt",
"rollingInterval": "Day"
}
}
]
}
}
See Configuration Guide for complete options.
Structured Logging Examples
With Context
foundry.Logger.LogInformation(
"Processing order {OrderId} for customer {CustomerId}",
orderId,
customerId);
With Properties
foundry.Logger.LogInformation(
new Dictionary<string, string> { ["WorkflowId"] = workflowId },
"Workflow started");
// Or use foundry.Logger.BeginScope(state, properties) for scoped context
Performance Metrics
var sw = Stopwatch.StartNew();
// ... operation ...
sw.Stop();
foundry.Logger.LogInformation(
"Operation {OperationName} completed in {Duration}ms",
operation.Name,
sw.Elapsed.TotalMilliseconds);
Sink Configuration
Built-in Console Sink
The extension includes a built-in console sink configured via SerilogLoggerOptions:
var logger = SerilogLoggerFactory.CreateLogger(new SerilogLoggerOptions
{
EnableConsoleSink = true,
MinimumLevel = "Debug"
});
Advanced Sinks (Host Integration)
For advanced sinks (File, Seq, Elasticsearch, etc.), use the CreateLogger(ILoggerFactory) overload with your host application's Serilog configuration:
// Configure Serilog in your host application (requires Serilog packages)
Log.Logger = new LoggerConfiguration()
.WriteTo.File("logs/workflow.log")
.WriteTo.Seq("http://localhost:5341")
.CreateLogger();
var hostLoggerFactory = LoggerFactory.Create(builder => builder.AddSerilog());
// Create WorkflowForge logger from host configuration
var logger = SerilogLoggerFactory.CreateLogger(hostLoggerFactory);
This approach gives you access to the full Serilog sink ecosystem while keeping the extension dependency-free.
Documentation
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.3)
- WorkflowForge (>= 2.1.1)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
v2.1.0: Updated for WorkflowForge v2.1.0 compatibility. Removed SupportsRestore references. Added ConfigureAwait(false) to all await calls. Improved error handling and resource disposal.