RimWorks.RimLogging
3.0.4
dotnet add package RimWorks.RimLogging --version 3.0.4
NuGet\Install-Package RimWorks.RimLogging -Version 3.0.4
<PackageReference Include="RimWorks.RimLogging" Version="3.0.4" />
<PackageVersion Include="RimWorks.RimLogging" Version="3.0.4" />
<PackageReference Include="RimWorks.RimLogging" />
paket add RimWorks.RimLogging --version 3.0.4
#r "nuget: RimWorks.RimLogging, 3.0.4"
#:package RimWorks.RimLogging@3.0.4
#addin nuget:?package=RimWorks.RimLogging&version=3.0.4
#tool nuget:?package=RimWorks.RimLogging&version=3.0.4
RimLogging: RimWorld log viewer and bug report sharing
<img src="https://raw.githubusercontent.com/RimWorks/rimworld-logging-framework/main/About/ModIcon.png" alt="RimLogging icon" width="96" align="right">
Read your RimWorld log inside the game. Filter it down to the red error you care about, then share it as a link with one click. RimLogging is also a structured logging framework for RimWorld 1.6+ mods. It replaces vanilla Verse.Log and UnityEngine.Debug.Log with one filterable pipeline. Every dependent mod shares it.
If you have used HugsLib's publish-log button, this covers the same job. HugsLib uploads the whole file as one wall of text and hands you a link. RimLogging lets you narrow to one channel and one level first, then sends what is left with your mod list attached.
- Hierarchical channels (XML defs or transient) with prefix-based resolution.
- Serilog-style templated messages plus anonymous-object structured context.
- Six levels:
Trace,Debug,Info,Warn,Error,Fatal. - Multi-sink output (Verse writeback, rolling text/NDJSON files, in-memory) with a plugin sink API.
- Lock-free MPSC queue with a background drain; synchronous bypass for
Error/Fatal. - Three-pane in-game log viewer with a channel tree and an expression filter DSL. The detail pane docks to the bottom, docks to the right, or pops out into its own window.
- A Roslyn analyzer in the NuGet package that flags leftover
Verse.Logcalls at build time.

Install
As a Steam Workshop dependency (recommended for shipped mods): end users install the Workshop mod once and every consumer mod shares one dll. Declare it in your About/About.xml:
<modDependencies>
<li>
<packageId>RimWorks.RimLogging</packageId>
<displayName>RimLogging</displayName>
<steamWorkshopUrl>steam://url/CommunityFilePage/REPLACE_WITH_WORKSHOP_ID</steamWorkshopUrl>
</li>
</modDependencies>
<loadAfter>
<li>RimWorks.RimLogging</li>
</loadAfter>
Or bundle it from NuGet. The build copies the dll, and its System.Text.Json runtime dependencies, into your mod's Assemblies/, so you don't need the Workshop dependency:
dotnet add package RimWorks.RimLogging
Usage
using RimWorks.RimLogging;
// Templated message with positional args.
Log.Info("colony {Name} founded at {Tile}", colony.Name, colony.Tile);
// Structured context from an anonymous object.
Log.Warn("low food", new { pawn, days_left = 2 });
// Exceptions: pass the exception first, or fold it into the context.
Log.Error(ex, "save failed");
// Tick-loop throttling: once ever, or at most once per interval. The key is global.
Log.WarnOnce("no-power", "the reactor has no power");
Log.WarnEvery("no-power", TimeSpan.FromMinutes(1), "the reactor still has no power");
// Timing: logs the message with an elapsed_ms context value when the block closes.
using (Log.Timed("worldgen")) { GenerateWorld(); }
// Explicit channel.
Log.Info("Cosmere.Roshar.Surgebinding", "bond formed", new { spren = spren.Label });
// Explicit channel + templated args: pass an explicit array so the channel
// overload is selected (a bare trailing value binds as structured context).
Log.Info("Cosmere.Roshar.Surgebinding", "bond formed with {Spren}", new object?[] { spren.Label });
The first string argument is the channel only when a later argument disambiguates the overload; Log.Info("text", arg) treats "text" as the message. Formatting is lazy: if no registered sink accepts the entry's level, the template is never rendered.
Docs
- Channels: ChannelDef XML, field reference, prefix resolution, built-in channels.
- Filter DSL: grammar and examples for the viewer's filter box.
- Custom sinks: the
ILogSinkAPI, SinkDef XML, built-in sinks. - Verse.Log analyzer: the
RIMLOG001andRIMLOG002build warnings, and what to call instead. - Settings and bug bundles: the mod settings page and the share-bundle payload.
- Bundle upload worker: the Cloudflare Worker behind bug-report uploads.
Contributing
See CONTRIBUTING.md for build commands, commit conventions, and translation notes.
More modding tools from RimWorks
| Tool | What it does |
|---|---|
| Pickle | Run Gherkin tests against a live RimWorld session, in the game |
| Quickstarts | Boot straight into a configured colony from the dev quicktest menu |
MIT licensed.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET Framework | net472 is compatible. net48 is compatible. net481 was computed. |
-
.NETFramework 4.7.2
- System.Text.Json (>= 10.0.12)
- System.ValueTuple (>= 4.6.2)
-
.NETFramework 4.8
- System.Text.Json (>= 10.0.12)
- System.ValueTuple (>= 4.6.2)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on RimWorks.RimLogging:
| Package | Downloads |
|---|---|
|
RimWorks.RimObs.Library
RimObs mod-side library: performance profiling and telemetry for RimWorld mods. Register named sections and metrics; the out-of-process collector aggregates the data and serves a dashboard. Net472 / net48, RimWorld 1.6+. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 3.0.4 | 332 | 10/1/2026 |
| 3.0.3 | 76 | 10/1/2026 |
| 3.0.2 | 80 | 9/30/2026 |
| 3.0.1 | 76 | 9/30/2026 |
| 3.0.0 | 97 | 9/27/2026 |
| 2.29.4 | 709 | 9/25/2026 |
| 2.29.3 | 124 | 9/25/2026 |
| 2.29.2 | 197 | 9/21/2026 |
| 2.29.1 | 190 | 9/19/2026 |
| 2.29.0 | 162 | 9/15/2026 |
| 2.28.1 | 130 | 9/14/2026 |
| 2.28.0 | 120 | 9/14/2026 |
| 2.27.3 | 175 | 9/13/2026 |
| 2.27.2 | 134 | 9/13/2026 |
| 2.27.1 | 187 | 9/8/2026 |
| 2.27.0 | 144 | 9/8/2026 |
| 2.26.2 | 100 | 9/8/2026 |
| 2.26.1 | 115 | 9/8/2026 |
| 2.26.0 | 126 | 9/8/2026 |
| 2.25.21 | 117 | 9/8/2026 |