SyslogLogging 2.1.0
dotnet add package SyslogLogging --version 2.1.0
NuGet\Install-Package SyslogLogging -Version 2.1.0
<PackageReference Include="SyslogLogging" Version="2.1.0" />
<PackageVersion Include="SyslogLogging" Version="2.1.0" />
<PackageReference Include="SyslogLogging" />
paket add SyslogLogging --version 2.1.0
#r "nuget: SyslogLogging, 2.1.0"
#:package SyslogLogging@2.1.0
#addin nuget:?package=SyslogLogging&version=2.1.0
#tool nuget:?package=SyslogLogging&version=2.1.0
<img src="assets/logo.png" alt="SyslogLogging Logo" width="128" height="128" />
SyslogLogging
SyslogLogging is a C# logging library for syslog, console, and file destinations. It supports synchronous and asynchronous logging, structured log entries, Microsoft.Extensions.Logging integration, and file retention management.
Current release: 2.1.0
Target builds:
.NET Standard 2.0.NET Standard 2.1.NET Framework 4.6.2.NET Framework 4.8.NET 8.0.NET 10.0
Highlights
- RFC 3164 syslog output
- Console and file logging in the same logger
- Structured logging with
LogEntry - Fluent structured logging builder
Microsoft.Extensions.Loggingprovider and DI registration- Configurable header format tokens including
{app},{pid},{source}, and{correlation} - Configurable exception severity
- Automatic retention cleanup for dated log files
- Shared Touchstone test coverage exposed through CLI, xUnit, and NUnit runners
What's New in 2.1.0
- Added
LoggingSettings.ApplicationNameso callers can explicitly control the{app}header token without changing the existing logging API. - Changed
{app}fallback resolution to useAssembly.GetEntryAssembly()?.GetName().Namebefore falling back to the current process name. - Fixed
.Exception()and.ExceptionAsync()so they honorLoggingSettings.ExceptionSeverity. - Fixed concurrent async file logging so writes are serialized correctly under load.
- Migrated tests to Touchstone shared suites with CLI, xUnit, and NUnit runners on
net8.0andnet10.0.
Installation
dotnet add package SyslogLogging
Quick Start
Simple Logging
using SyslogLogging;
LoggingModule log = new LoggingModule();
await log.InfoAsync("Hello, world!");
Syslog Logging
using SyslogLogging;
LoggingModule log = new LoggingModule("mysyslogserver", 514);
await log.WarnAsync("Rate limit exceeded");
File Logging
using SyslogLogging;
LoggingModule log = new LoggingModule("./logs/app.log", FileLoggingMode.SingleLogFile);
await log.InfoAsync("File-only message");
Structured Logging
LogEntry
LogEntry entry = new LogEntry(Severity.Error, "Payment processing failed")
.WithProperty("OrderId", orderId)
.WithProperty("Amount", amount)
.WithProperty("Currency", "USD")
.WithCorrelationId(correlationId)
.WithSource("PaymentService")
.WithException(exception);
await log.LogEntryAsync(entry);
Fluent Builder
await log.BeginStructuredLog(Severity.Info, "User login")
.WithProperty("UserId", userId)
.WithProperty("IpAddress", ipAddress)
.WithCorrelationId(correlationId)
.WriteAsync();
Microsoft.Extensions.Logging Integration
services.AddLogging(builder =>
{
builder.AddSyslog("syslogserver", 514);
});
Multiple syslog targets are also supported:
services.AddLogging(builder =>
{
builder.AddSyslog(new List<SyslogServer>
{
new SyslogServer("primary-log", 514),
new SyslogServer("backup-log", 514)
}, enableConsole: true);
});
Header Formatting
log.Settings.HeaderFormat = "{ts} {host}[{pid}] {sev} [T:{thread}] [{app}]";
log.Settings.ApplicationName = "MyService";
log.Settings.TimestampFormat = "yyyy-MM-dd HH:mm:ss.fff";
log.Settings.UseUtcTime = true;
Available header variables:
| Variable | Description | Example |
|---|---|---|
{ts} |
Timestamp | 2024-01-15 14:30:25.123 |
{host} |
Machine name | web-server-01 |
{thread} |
Thread ID | 12 |
{sev} |
Severity name | Info |
{level} |
Severity number | 6 |
{pid} |
Process ID | 1234 |
{user} |
Current username | john.doe |
{app} |
Application name | MyWebApp |
{domain} |
App domain | MyWebApp.exe |
{cpu} |
CPU core count | 8 |
{mem} |
Memory usage in MB | 256 |
{uptime} |
Process uptime | 02:45:30 |
{correlation} |
Correlation ID | abc-123-def |
{source} |
Log source | UserService |
{app} resolves in this order:
log.Settings.ApplicationNameAssembly.GetEntryAssembly()?.GetName().Name- Current process name
File Retention
LoggingModule log = new LoggingModule("./logs/app.log", FileLoggingMode.FileWithDate, true);
LoggingSettings settings = log.Settings;
settings.LogRetentionDays = 30;
log.Settings = settings;
Retention cleanup only applies when using FileLoggingMode.FileWithDate. The cleanup timer removes files matching the dated filename pattern when they are older than the configured retention period.
Testing
Run the shared Touchstone suite through the CLI runner:
dotnet run --project src/Test.Automated/Test.Automated.csproj -f net10.0
dotnet run --project src/Test.Automated/Test.Automated.csproj -f net8.0
Run the same shared descriptors through xUnit and NUnit:
dotnet test src/Test.Xunit/Test.Xunit.csproj
dotnet test src/Test.Nunit/Test.Nunit.csproj
The shared suite covers:
- Constructor and settings validation
- Severity helpers
- Structured and fluent logging APIs
- Exception severity behavior
- File output and retention cleanup
- Message ordering and concurrency
- Syslog delivery and error handling
Microsoft.Extensions.Loggingintegration
Related Project
The repository also includes SyslogServer, a simple utility application for receiving syslog traffic during development and testing.
Version History
See CHANGELOG.md for release details.
Help
File issues or feature requests at:
| 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 is compatible. 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 is compatible. 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 is compatible. |
| .NET Framework | net461 was computed. net462 is compatible. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 is compatible. 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. |
-
.NETFramework 4.6.2
- Microsoft.Extensions.Logging.Abstractions (>= 8.0.0)
- System.Text.Json (>= 8.0.5)
-
.NETFramework 4.8
- Microsoft.Extensions.Logging.Abstractions (>= 8.0.0)
- System.Text.Json (>= 8.0.5)
-
.NETStandard 2.0
- Microsoft.Extensions.Logging.Abstractions (>= 8.0.0)
- System.Text.Json (>= 8.0.5)
-
.NETStandard 2.1
- Microsoft.Extensions.Logging.Abstractions (>= 8.0.0)
- System.Text.Json (>= 8.0.5)
-
net10.0
- Microsoft.Extensions.Logging.Abstractions (>= 8.0.0)
-
net8.0
- Microsoft.Extensions.Logging.Abstractions (>= 8.0.0)
NuGet packages (22)
Showing the top 5 NuGet packages that depend on SyslogLogging:
| Package | Downloads |
|---|---|
|
Omnicx.WebStore.Core
OmniCX WebStore Core contains the Controllers, API SDK and Models required to run the MVC Views of the WebStore. |
|
|
BigQ.dll
BigQ is a messaging platform using TCP sockets and websockets featuring sync, async, channel, and private communications. |
|
|
ContainerFS
Self-contained single-user file system written in C#. |
|
|
Less3
<3 Less3 is S3-compatible object storage that you can run on your laptop, server, or anywhere you like. |
|
|
LiteGraph
LiteGraph is a property graph database with support for graph relationships, tags, labels, metadata, data, and vectors. |
GitHub repositories (1)
Showing the top 1 popular GitHub repositories that depend on SyslogLogging:
| Repository | Stars |
|---|---|
|
litegraphdb/litegraph
Lightweight graph database with relational, vector, and MCP support, designed to power knowledge and artificial intelligence persistence and retrieval.
|
| Version | Downloads | Last Updated |
|---|---|---|
| 2.1.0 | 100 | 5/4/2026 |
| 2.0.13 | 1,862 | 12/28/2025 |
| 2.0.12 | 466 | 12/24/2025 |
| 2.0.11 | 6,021 | 10/7/2025 |
| 2.0.10 | 574 | 9/22/2025 |
| 2.0.9 | 236 | 9/22/2025 |
| 2.0.8 | 9,742 | 1/7/2025 |
| 2.0.7 | 5,483 | 12/23/2024 |
| 2.0.6 | 873 | 10/17/2024 |
| 2.0.5 | 598 | 9/10/2024 |
| 2.0.4 | 271 | 9/10/2024 |
| 2.0.3 | 272 | 9/10/2024 |
| 2.0.2 | 16,756 | 8/1/2023 |
| 2.0.1.8 | 10,284 | 10/6/2022 |
| 2.0.1.7 | 22,029 | 11/19/2021 |
| 2.0.1.6 | 1,609 | 11/12/2021 |
| 2.0.1.5 | 4,487 | 9/13/2021 |
| 2.0.1.4 | 25,465 | 5/20/2021 |
| 2.0.1.3 | 4,723 | 3/11/2021 |
| 2.0.1.2 | 1,346 | 3/11/2021 |
Added ApplicationName override, fixed ExceptionSeverity handling, improved concurrent async file logging, and migrated tests to Touchstone