SyslogLogging 2.0.11
dotnet add package SyslogLogging --version 2.0.11
NuGet\Install-Package SyslogLogging -Version 2.0.11
<PackageReference Include="SyslogLogging" Version="2.0.11" />
<PackageVersion Include="SyslogLogging" Version="2.0.11" />
<PackageReference Include="SyslogLogging" />
paket add SyslogLogging --version 2.0.11
#r "nuget: SyslogLogging, 2.0.11"
#:package SyslogLogging@2.0.11
#addin nuget:?package=SyslogLogging&version=2.0.11
#tool nuget:?package=SyslogLogging&version=2.0.11
<img src="assets/logo.png" alt="SyslogLogging Logo" width="128" height="128" />
SyslogLogging
๐ Modern, high-performance C# logging library for syslog, console, and file destinations with async support, structured logging, and Microsoft.Extensions.Logging integration.
Targeted to .NET Standard 2.0+, .NET Framework 4.6.2+, .NET 6.0+, and .NET 8.0.
โจ What's New in v2.0.9+
๐ฅ Major New Features
- ๐ช๏ธ Full async support with 
CancellationTokenthroughout - ๐ Structured logging with properties, correlation IDs, and JSON serialization
 - ๐ Microsoft.Extensions.Logging integration (ILogger, DI support)
 - ๐๏ธ Enterprise-grade thread safety with comprehensive race condition prevention
 - ๐ฏ Integrated SyslogServer for end-to-end testing
 - ๐ก๏ธ Comprehensive input validation on all public properties
 - ๐งช Extensive thread safety testing (20+ specialized concurrent scenarios)
 
๐ง Performance & Reliability
- Thread-safe operations with proper locking mechanisms
 - Immediate log delivery with direct processing
 - Memory efficient with minimal overhead
 - Standards compliant RFC 3164 syslog format support
 
๐ Quick Start
Simple Logging
using SyslogLogging;
LoggingModule log = new LoggingModule();
await log.InfoAsync("Hello, world!");
Async with Structured Data
using SyslogLogging;
LoggingModule log = new LoggingModule("mysyslogserver", 514);
// Simple async logging
await log.ErrorAsync("Something went wrong", cancellationToken);
// Structured logging with properties
LogEntry entry = new LogEntry(Severity.Warning, "Rate limit exceeded")
    .WithProperty("RequestsPerSecond", 150)
    .WithProperty("ClientId", "user123")
    .WithCorrelationId(Request.Headers["X-Correlation-ID"]);
await log.LogEntryAsync(entry);
Fluent Structured Logging
log.BeginStructuredLog(Severity.Info, "User login")
    .WithProperty("UserId", userId)
    .WithProperty("IpAddress", ipAddress)
    .WithProperty("Timestamp", DateTime.UtcNow)
    .WithCorrelationId(correlationId)
    .WriteAsync();
๐ Microsoft.Extensions.Logging Integration
ASP.NET Core / Generic Host
// Program.cs or Startup.cs
services.AddLogging(builder =>
{
    builder.AddSyslog("syslogserver", 514);
});
// In your controllers/services
public class MyController : ControllerBase
{
    private readonly ILogger<MyController> _logger;
    public MyController(ILogger<MyController> logger)
    {
        _logger = logger;
    }
    public IActionResult Get()
    {
        _logger.LogInformation("API called with correlation {CorrelationId}",
            HttpContext.TraceIdentifier);
        return Ok();
    }
}
Multiple Destinations
services.AddLogging(builder =>
{
    builder.AddSyslog(new List<SyslogServer>
    {
        new SyslogServer("primary-log", 514),
        new SyslogServer("backup-log", 514)
    }, enableConsole: true);
});
๐ Advanced Structured Logging
Rich Metadata
LogEntry entry = new LogEntry(Severity.Error, "Payment processing failed")
    .WithProperty("OrderId", orderId)
    .WithProperty("Amount", amount)
    .WithProperty("Currency", "USD")
    .WithProperty("PaymentProvider", "Stripe")
    .WithProperty("ErrorCode", errorCode)
    .WithCorrelationId(correlationId)
    .WithSource("PaymentService")
    .WithException(exception);
await log.LogEntryAsync(entry);
JSON Serialization
LogEntry entry = new LogEntry(Severity.Info, "User session")
    .WithProperty("SessionDuration", TimeSpan.FromMinutes(45))
    .WithProperty("PagesVisited", new[] { "/home", "/products", "/checkout" });
string json = entry.ToJson();
// Output: {"timestamp":"2023-12-01T10:30:00.000Z","severity":"Info","message":"User session","threadId":1,"properties":{"SessionDuration":"00:45:00","PagesVisited":["/home","/products","/checkout"]}}
๐ฏ Multiple Destinations
Syslog + Console + File
List<SyslogServer> servers = new List<SyslogServer>
{
    new SyslogServer("primary-syslog", 514),
    new SyslogServer("backup-syslog", 514)
};
LoggingModule log = new LoggingModule(servers, enableConsole: true);
log.Settings.FileLogging = FileLoggingMode.FileWithDate;  // Creates dated files
log.Settings.LogFilename = "./logs/app.log";
log.Alert("This goes to 2 syslog servers, console, AND file!");
File-Only Logging
LoggingModule log = new LoggingModule("./logs/app.log", FileLoggingMode.SingleLogFile);
await log.InfoAsync("File-only message");
๐จ Console Colors & Formatting
Enable Colors
log.Settings.EnableColors = true;
log.Settings.Colors.Error = new ColorScheme(ConsoleColor.Red, ConsoleColor.Black);
log.Settings.Colors.Warning = new ColorScheme(ConsoleColor.Yellow, ConsoleColor.Black);
Custom Message Format with Rich Variables
// Basic format
log.Settings.HeaderFormat = "{ts} [{sev}] {host}:{thread}";
// Detailed production format
log.Settings.HeaderFormat = "{ts} {host}[{pid}] {sev} [T:{thread}] [{app}]";
// Performance monitoring format
log.Settings.HeaderFormat = "{ts} {host} CPU:{cpu} MEM:{mem}MB UP:{uptime} {sev}";
// Microservices format
log.Settings.HeaderFormat = "{ts} [{app}:{pid}] {sev} [{correlation}] [{source}]";
log.Settings.TimestampFormat = "yyyy-MM-dd HH:mm:ss.fff";
log.Settings.UseUtcTime = true;
Available Header Format Variables
| Variable | Description | Example Output | 
|---|---|---|
{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 (0-7) | 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 (MB) | 256 | 
{uptime} | 
Process uptime | 02:45:30 | 
{correlation} | 
Correlation ID | abc-123-def | 
{source} | 
Log source | UserService | 
๐ง Configuration Examples
Production Configuration
LoggingModule log = new LoggingModule("prod-syslog", 514, enableConsole: false);
// Set appropriate filters
log.Settings.MinimumSeverity = Severity.Warning;
log.Settings.MaxMessageLength = 8192;
// Structured logging for analysis
await log.BeginStructuredLog(Severity.Info, "Application started")
    .WithProperty("Version", Assembly.GetExecutingAssembly().GetName().Version)
    .WithProperty("Environment", Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"))
    .WithProperty("MachineName", Environment.MachineName)
    .WriteAsync();
Development Configuration
LoggingModule log = new LoggingModule("localhost", 514, enableConsole: true);
// Immediate feedback for development
log.Settings.EnableColors = true;
log.Settings.MinimumSeverity = Severity.Debug;
// File logging for detailed debugging
log.Settings.FileLogging = FileLoggingMode.FileWithDate;
log.Settings.LogFilename = "./logs/debug.log";
High-Concurrency Configuration
LoggingModule log = new LoggingModule("logserver", 514, enableConsole: true);
// Thread-safe operations
log.Settings.EnableColors = true;
Task.Run(async () =>
{
    while (true)
    {
        // Even rapid server changes are thread-safe
        log.Servers = GetAvailableServers();
        await Task.Delay(1000);
    }
});
// Multiple threads can safely log concurrently
Parallel.For(0, 1000, i =>
{
    log.Info($"Concurrent message from thread {Thread.CurrentThread.ManagedThreadId}: {i}");
});
๐งช Testing
Run the comprehensive test suite:
cd src/Test
dotnet run
The test program validates each library capability including:
- โ All constructor patterns and validation
 - โ Sync and async logging methods
 - โ Structured logging with properties and correlation IDs
 - โ Comprehensive thread safety under concurrent load
 - โ Multiple destination delivery (syslog + console + file)
 - โ Error handling and edge cases
 - โ Performance benchmarks
 - โ SyslogServer integration and end-to-end testing
 
๐ค Help or Feedback
Found a bug or have a feature request? File an issue - we'd love to hear from you!
๐ Special Thanks
We'd like to extend a special thank you to those that have helped make this library better: @dev-jan @jisotalo
๐ Version History
Please refer to CHANGELOG.md for detailed version history.
โญ Star this repo if SyslogLogging has helped your project!
| Product | Versions Compatible and additional computed target framework versions. | 
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 is compatible. 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 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 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)
 
 - 
                                                    
net6.0
- Microsoft.Extensions.Logging.Abstractions (>= 8.0.0)
 - System.Text.Json (>= 8.0.5)
 
 - 
                                                    
net8.0
- Microsoft.Extensions.Logging.Abstractions (>= 8.0.0)
 - System.Text.Json (>= 8.0.5)
 
 
NuGet packages (18)
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
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated | 
|---|---|---|
| 2.0.11 | 1,776 | 10/7/2025 | 
| 2.0.10 | 426 | 9/22/2025 | 
| 2.0.9 | 173 | 9/22/2025 | 
| 2.0.8 | 6,498 | 1/7/2025 | 
| 2.0.7 | 5,146 | 12/23/2024 | 
| 2.0.6 | 788 | 10/17/2024 | 
| 2.0.5 | 375 | 9/10/2024 | 
| 2.0.4 | 204 | 9/10/2024 | 
| 2.0.3 | 205 | 9/10/2024 | 
| 2.0.2 | 14,020 | 8/1/2023 | 
| 2.0.1.8 | 9,854 | 10/6/2022 | 
| 2.0.1.7 | 21,855 | 11/19/2021 | 
| 2.0.1.6 | 1,504 | 11/12/2021 | 
| 2.0.1.5 | 4,419 | 9/13/2021 | 
| 2.0.1.4 | 25,390 | 5/20/2021 | 
| 2.0.1.3 | 4,641 | 3/11/2021 | 
| 2.0.1.2 | 1,276 | 3/11/2021 | 
| 2.0.1.1 | 1,239 | 3/10/2021 | 
| 2.0.1 | 1,258 | 3/10/2021 | 
| 1.3.2.7 | 8,999 | 12/2/2020 | 
| 1.3.2.6 | 2,920 | 11/23/2020 | 
| 1.3.2.5 | 2,294 | 11/15/2020 | 
| 1.3.2.4 | 1,569 | 11/6/2020 | 
| 1.3.2.3 | 5,631 | 9/10/2020 | 
| 1.3.2.2 | 24,194 | 6/10/2020 | 
| 1.3.2.1 | 9,421 | 5/8/2020 | 
| 1.3.2 | 73,955 | 12/3/2019 | 
| 1.3.1 | 11,724 | 10/27/2019 | 
| 1.3.0 | 1,399 | 10/7/2019 | 
| 1.2.1 | 4,516 | 9/21/2019 | 
| 1.2.0 | 2,467 | 8/10/2019 | 
| 1.1.0 | 805,129 | 7/30/2019 | 
| 1.0.12 | 1,421 | 7/6/2019 | 
| 1.0.11 | 1,542 | 6/12/2019 | 
| 1.0.10 | 5,793 | 3/10/2019 | 
| 1.0.9 | 17,681 | 9/11/2017 | 
| 1.0.8 | 6,823 | 12/12/2016 | 
Added async support, structured logging, background queuing, and Microsoft.Extensions.Logging integration