SPLog 1.0.2

There is a newer version of this package available.
See the version list below for details.
dotnet add package SPLog --version 1.0.2
                    
NuGet\Install-Package SPLog -Version 1.0.2
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="SPLog" Version="1.0.2" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="SPLog" Version="1.0.2" />
                    
Directory.Packages.props
<PackageReference Include="SPLog" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add SPLog --version 1.0.2
                    
#r "nuget: SPLog, 1.0.2"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package SPLog@1.0.2
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=SPLog&version=1.0.2
                    
Install as a Cake Addin
#tool nuget:?package=SPLog&version=1.0.2
                    
Install as a Cake Tool

SPLog

SPLog is a lightweight logging DLL focused on performance, simplicity, and practical file logging for .NET applications.

GitHub repository: https://github.com/cku3987/SPLog

Why SPLog

  • Simple API
  • Fast enough for high-volume application logging
  • File logging and console logging out of the box
  • External JSON configuration support
  • Exception logging support
  • Daily and hourly rolling
  • Append and CreateNew file conflict handling

Quick Start

using SPLog;

using var logger = SPLogFactory.Create(options =>
{
    options.Name = "Core";
    options.EnableConsole = true;
    options.EnableFile = true;
    options.FilePath = "logs";
    options.TimestampFormat = "yyyy-MM-dd HH:mm:ss.fff";
});

logger.Information("application started");
logger.Warning("response delay detected");

try
{
    RunProcess();
}
catch (Exception ex)
{
logger.Error(ex, "process failed");
}

Global Logger With Categories

If you want one global logger but still want subsystem names inside the log, create categories from the root logger:

using var appLog = SPLogFactory.Create(options =>
{
    options.Name = "App";
    options.EnableFile = true;
    options.FilePath = "logs";
});

var coreLog = appLog.CreateCategory("Core");
var networkLog = appLog.CreateCategory("Network");
var socketLog = networkLog.CreateCategory("Socket");

coreLog.Information("core started");
networkLog.Warning("network delay detected");
socketLog.Error("socket closed");

This keeps one shared queue and one shared writer, while log lines are identified as App.Core, App.Network, and App.Network.Socket.

External Configuration

using var logger = SPLogFactory.CreateFromJsonFile("config/splog.core.json");

Example JSON:

{
  "Name": "Core",
  "MinimumLevel": "Information",
  "TimestampFormat": "yyyy-MM-dd HH:mm:ss.fff",
  "EnableConsole": false,
  "EnableFile": true,
  "FilePath": "logs",
  "FileConflictMode": "Append",
  "FileRollingMode": "Hourly",
  "MaxFileSizeBytes": 52428800,
  "MaxRollingFiles": 500,
  "QueueCapacity": 8192,
  "BatchSize": 10,
  "FlushIntervalMs": 100,
  "FileBufferSize": 65536
}

File Naming Behavior

  • FilePath = "logs" creates <Name>.log automatically
  • Relative paths are resolved from AppContext.BaseDirectory
  • Absolute paths are used as-is

Examples:

  • Daily + AppendCore_20260331.log
  • Daily + CreateNewCore_20260331.log, then Core_20260331_001.log
  • Hourly + CreateNewCore_20260331_13.log, then Core_20260331_13_001.log

Validation Projects

This repository also includes validation helpers:

  • SPLog.Tests Deterministic correctness checks
  • SPLog.StressRunner Stress, smoke, and long-run validation for one or many loggers at the same time

Recommended commands:

dotnet build SPLog.sln -c Release -m:1
dotnet run --project SPLog.Tests\SPLog.Tests.csproj -c Release --no-build
dotnet run --project SPLog.StressRunner\SPLog.StressRunner.csproj -c Release -- --config codex\SPLog-StressRunner.sample.json

The default stress sample includes:

  • multiple logger scenarios running at the same time
  • one root logger used directly and shared by multiple category scenarios
  • additional independent loggers using separate file paths
  • a 5-digit stress-run timestamp format for easier timing inspection
  • a configuration that is safe to auto-load when launching from Visual Studio

Documentation

  • English guide: docs/SPLog-Guide-EN.html
  • Korean guide: docs/SPLog-Guide-KO.html
  • Validation guide: codex/SPLog-Validation-Guide-EN.md
Product Compatible and additional computed target framework versions.
.NET 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net8.0

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.2.1 121 5/19/2026
1.2.0 116 5/19/2026
1.1.1 117 4/21/2026
1.1.0 116 4/17/2026
1.0.2 119 3/31/2026
1.0.1 109 3/31/2026
1.0.0 114 3/23/2026