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
- 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
- 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.
dotnet add package SyslogLoggingusing SyslogLogging;
LoggingModule log = new LoggingModule();
await log.InfoAsync("Hello, world!");using SyslogLogging;
LoggingModule log = new LoggingModule("mysyslogserver", 514);
await log.WarnAsync("Rate limit exceeded");using SyslogLogging;
LoggingModule log = new LoggingModule("./logs/app.log", FileLoggingMode.SingleLogFile);
await log.InfoAsync("File-only message");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);await log.BeginStructuredLog(Severity.Info, "User login")
.WithProperty("UserId", userId)
.WithProperty("IpAddress", ipAddress)
.WithCorrelationId(correlationId)
.WriteAsync();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);
});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
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.
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.0Run the same shared descriptors through xUnit and NUnit:
dotnet test src/Test.Xunit/Test.Xunit.csproj
dotnet test src/Test.Nunit/Test.Nunit.csprojThe 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
The repository also includes SyslogServer, a simple utility application for receiving syslog traffic during development and testing.
See CHANGELOG.md for release details.
File issues or feature requests at:
