Serilog
NuGet Serilog package re-bundled for convenient consumption and dependency management.
Screenshots 1 screenshots
About this mod Author’s original text
Serilog
Serilog is a diagnostic logging library for.NET applications. It is easy to set up, has a clean API, and runs on all recent.NET platforms. While it's useful even in the simplest applications, Serilog's support for structured logging shines when instrumenting complex, distributed, and asynchronous applications and systems.
Like many other libraries for.NET, Serilog provides diagnostic logging to files, the console, and many other outputs.
using var log = new LoggerConfiguration().WriteTo.Console().WriteTo.File("log.txt").CreateLogger();
log.Information("Hello, Serilog!");
Unlike other logging libraries, Serilog is built from the ground up to record _structured event data_.
var position = new { Latitude = 25, Longitude = 134 };
var elapsedMs = 34;
log.Information("Processed {@Position} in {Elapsed} ms", position, elapsedMs);
Serilog uses message templates, a simple DSL that extends.NET format strings with _named_ as well as positional parameters. Instead of formatting events immediately into text, Serilog captures the values associated with each named parameter.
The example above records two properties, Position and Elapsed, in the log event. The @ operator in front of Position tells Serilog to _serialize_ the object passed in, rather than convert it using ToString(). Serilog's deep and rich support for structured event data opens up a huge range of diagnostic possibilities not available when using traditional loggers.
Rendered into JSON format for example, these properties appear alongside the timestamp, level, and message like:
{"Position": {"Latitude": 25, "Longitude": 134}, "Elapsed": 34}
Back-ends that are capable of recording structured event data make log searches and analysis possible without log parsing or regular expressions.
Supporting structured data doesn't mean giving up text: when Serilog writes events to files or the console, the template and properties are rendered into friendly human-readable text just like a traditional logging library would produce:
09:14:22 [INF] Processed {"Latitude": 25, "Longitude": 134} in 34 ms.
Upgrading from an earlier Serilog version? Find release notes here.
Features
- Community-backed and actively developed
- Format-based logging API with familiar levels like Debug, Information, Warning, Error, and so-on
- Discoverable C# configuration syntax and optional XML or JSON configuration support
- Efficient when enabled, extremely low overhead when a logging level is switched off
- Best-in-class.NET Core support, including rich integration with ASP.NET Core
- Support for a comprehensive range of sinks, including files, the console, on-premises and cloud-based log servers, databases, and message queues
- Sophisticated enrichment of log events with contextual information, including scoped (LogContext) properties, thread and process identifiers, and domain-specific correlation ids such as HttpRequestId
- Zero-shared-state Logger objects, with an optional global static Log class
- Format-agnostic logging pipeline that can emit events in plain text, JSON, in-memory LogEvent objects (including Rx pipelines) and other formats
Getting started
Serilog is installed from NuGet. To view log events, one or more sinks need to be installed as well, here we'll use the pretty-printing console sink, and a rolling file set:
dotnet add package Serilog
dotnet add package Serilog.Sinks.Console
dotnet add package Serilog.Sinks.File
The simplest way to set up Serilog is using the static Log class. A LoggerConfiguration is used to create and assign the default logger, normally in _Program.cs_:
using Serilog;
Log.Logger = new LoggerConfiguration().WriteTo.Console().WriteTo.File("log.txt",
rollingInterval: RollingInterval.Day,
rollOnFileSizeLimit: true).CreateLogger();
try
{
// Your program here...
const string name = "Serilog";
Log.Information("Hello, {Name}!", name);
throw new InvalidOperationException("Oops...");
}
catch (Except
Install & use Install: BepInEx plugin
- The archive from playbuff is the mod itself — usually a BepInEx plugin (a .dll or a plugin folder once unzipped).
- Recommended: use a community mod manager (such as r2modman) — pick this game, import the mod, and the manager sets up BepInEx and its dependencies for you.
- Manual route: install the BepInEx loader in the game folder, then drop the unzipped .dll or plugin folder into BepInEx/plugins/.
- Launch the game — the BepInEx console logs every plugin it loads; seeing this mod in the log means it is installed.
Mods with listed dependencies need those installed too, or they will not load. Options are usually changed in-game or in the plugin's config file.
Install these first, or the mod will not work: