WorkflowForge.Extensions.Logging.Serilog
2.0.0
See the version list below for details.
dotnet add package WorkflowForge.Extensions.Logging.Serilog --version 2.0.0
NuGet\Install-Package WorkflowForge.Extensions.Logging.Serilog -Version 2.0.0
<PackageReference Include="WorkflowForge.Extensions.Logging.Serilog" Version="2.0.0" />
<PackageVersion Include="WorkflowForge.Extensions.Logging.Serilog" Version="2.0.0" />
<PackageReference Include="WorkflowForge.Extensions.Logging.Serilog" />
paket add WorkflowForge.Extensions.Logging.Serilog --version 2.0.0
#r "nuget: WorkflowForge.Extensions.Logging.Serilog, 2.0.0"
#:package WorkflowForge.Extensions.Logging.Serilog@2.0.0
#addin nuget:?package=WorkflowForge.Extensions.Logging.Serilog&version=2.0.0
#tool nuget:?package=WorkflowForge.Extensions.Logging.Serilog&version=2.0.0
WorkflowForge.Extensions.Logging.Serilog
<p align="center"> <img src="https://raw.githubusercontent.com/animatlabs/workflow-forge/main/icon.png" alt="WorkflowForge" width="120" height="120"> </p>
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.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
using (LogContext.PushProperty("WorkflowId", workflow.Id))
{
foundry.Logger.LogInformation("Workflow started");
// All logs in this scope include WorkflowId
}
Performance Metrics
var sw = Stopwatch.StartNew();
// ... operation ...
sw.Stop();
foundry.Logger.LogInformation(
"Operation {OperationName} completed in {Duration}ms",
operation.Name,
sw.Elapsed.TotalMilliseconds);
Sinks
Console Sink
.WriteTo.Console(outputTemplate:
"[{Timestamp:HH:mm:ss} {Level:u3}] {Message:lj}{NewLine}{Exception}")
File Sink
.WriteTo.File(
"logs/workflow-.txt",
rollingInterval: RollingInterval.Day,
retainedFileCountLimit: 7)
Seq Sink
.WriteTo.Seq("http://localhost:5341")
Elasticsearch Sink
.WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri("http://localhost:9200")))
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
- WorkflowForge (>= 2.0.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Major release v2.0.0:
- Dependencies internalized via ILRepack (where applicable)
- Users can avoid third-party version conflicts
- ISystemTimeProvider integrated for testability
- Enhanced documentation and samples
- Enterprise-ready for production workflows