LittyLogs.File
0.1.0-dev
See the version list below for details.
dotnet add package LittyLogs.File --version 0.1.0-dev
NuGet\Install-Package LittyLogs.File -Version 0.1.0-dev
<PackageReference Include="LittyLogs.File" Version="0.1.0-dev" />
<PackageVersion Include="LittyLogs.File" Version="0.1.0-dev" />
<PackageReference Include="LittyLogs.File" />
paket add LittyLogs.File --version 0.1.0-dev
#r "nuget: LittyLogs.File, 0.1.0-dev"
#:package LittyLogs.File@0.1.0-dev
#addin nuget:?package=LittyLogs.File&version=0.1.0-dev&prerelease
#tool nuget:?package=LittyLogs.File&version=0.1.0-dev&prerelease
litty-logs ๐ฅ
yo your .NET logs are giving corporate dystopia energy rn and thats not it bestie. litty-logs fully rewrites all them boring built-in framework messages into gen alpha slang while also blessing your terminal with emojis and ANSI colors no cap
before (deadass boring) ๐
info: Microsoft.Hosting.Lifetime[14]
Now listening on: http://localhost:5000
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Content root path: /app
after (absolutely bussin) ๐ฅ
[๐ฅ info] [2026-02-18T21:45:00.420Z] [Lifetime] we vibing on http://localhost:5000 fr fr ๐ง
[๐ฅ info] [2026-02-18T21:45:00.421Z] [Lifetime] app is bussin and ready to slay bestie ๐
yeet Ctrl+C to dip out no cap
[๐ฅ info] [2026-02-18T21:45:00.421Z] [Lifetime] content root living at /app bestie ๐
installation
dotnet add package LittyLogs
# for xUnit test output (optional, separate package)
dotnet add package LittyLogs.Xunit
# for file sink with rotation and gzip compression (optional, separate package)
dotnet add package LittyLogs.File
# for the CLI tool that litty-fies build and test output
dotnet tool install --global LittyLogs.Tool
usage โ one line thats it thats the tweet
web api
using LittyLogs;
var builder = WebApplication.CreateBuilder(args);
builder.Logging.AddLittyLogs(); // thats it bestie ๐ฅ
var app = builder.Build();
app.Run();
hosted service / background worker
using LittyLogs;
var host = Host.CreateDefaultBuilder(args)
.ConfigureLogging(logging => logging.AddLittyLogs())
.ConfigureServices(services => services.AddHostedService<MyService>())
.Build();
await host.RunAsync();
console script (the ten-liner speedrun)
using LittyLogs;
using Microsoft.Extensions.Logging;
using var factory = LoggerFactory.Create(logging =>
{
logging.SetMinimumLevel(LogLevel.Trace);
logging.AddLittyLogs();
});
var logger = factory.CreateLogger("MyScript");
logger.LogInformation("we in here bestie ๐ฅ");
xUnit tests
using LittyLogs.Xunit;
using Xunit;
using Xunit.Abstractions;
public class MyTests
{
private readonly ILogger<MyTests> _logger;
public MyTests(ITestOutputHelper output)
{
// one line to litty-fy your test output bestie ๐
_logger = output.CreateLittyLogger<MyTests>();
}
[Fact]
public void MyTest()
{
_logger.LogInformation("this shows up litty-fied in test output ๐ฅ");
}
}
JSON structured logging โ for when machines need to eat too ๐ฝ๏ธ
same litty rewrites and emojis, but as valid JSON. your log aggregator is gonna love this no cap
using LittyLogs;
var builder = WebApplication.CreateBuilder(args);
builder.Logging.AddLittyJsonLogs(); // structured JSON with emojis bestie ๐ฅ
var app = builder.Build();
app.Run();
output:
{"timestamp":"2026-02-19T10:45:00.420Z","level":"info","emoji":"๐ฅ","category":"Lifetime","message":"app is bussin and ready to slay bestie ๐
yeet Ctrl+C to dip out no cap"}
emojis in JSON? absolutely bussin โ JSON is UTF-8 native so every parser on earth handles it perfectly ๐
file sink โ yeet logs to disk with rotation and compression ๐
using LittyLogs.File;
var builder = WebApplication.CreateBuilder(args);
builder.Logging.AddLittyFileLogs(opts =>
{
opts.FilePath = "logs/app.log";
opts.OutputFormat = LittyFileOutputFormat.Text; // or Json for structured output
opts.RollingInterval = LittyRollingInterval.Daily;
opts.MaxFileSizeBytes = 10 * 1024 * 1024; // 10MB then rotate
opts.CompressionMode = LittyCompressionMode.Gzip; // compress rotated files ๐๏ธ
});
var app = builder.Build();
app.Run();
features that go hard:
- async I/O โ
Channel<string>based, your app thread never blocks on disk writes ๐ - text or JSON โ human-readable or machine-parseable, your choice bestie
- size + time rotation โ daily, hourly, or size-based. rotated files get timestamps in the name
- gzip compression โ old rotated files auto-compress to
.gz, active file stays uncompressed - startup safeguard โ never auto-rotates on startup, only rotates before writing the next entry ๐
- no ANSI codes โ files never get terminal escape chars, thats cursed ๐
what gets litty-fied
all the boring framework messages you see every dotnet run:
| boring version ๐ | litty version ๐ฅ |
|---|---|
| Application started. Press Ctrl+C to shut down. | app is bussin and ready to slay bestie ๐ yeet Ctrl+C to dip out no cap |
| Now listening on: {url} | we vibing on {url} fr fr ๐ง |
| Content root path: {path} | content root living at {path} bestie ๐ |
| Hosting environment: {env} | we in our {env} era rn โจ |
| Application is shutting down... | app said aight imma head out ๐ |
| Request starting {details} | yo a request just slid in: {details} ๐ |
| Request finished {details} | request finished cooking: {details} ๐ณ |
plus hosting lifecycle, endpoint routing, and more fr fr
log level emojis
| level | emoji | vibe |
|---|---|---|
| Trace | ๐ | lowkey peeking |
| Debug | ๐ | investigating bestie |
| Information | ๐ฅ | bussin as usual |
| Warning | ๐ค | not it |
| Error | ๐ | big L |
| Critical | โ ๏ธ | its giving death |
options โ configure the vibe
builder.Logging.AddLittyLogs(options =>
{
options.RewriteMessages = true; // rewrite framework messages (default: true, thats the whole point)
options.UseColors = true; // ANSI colors (default: true)
options.ShortenCategories = true; // yeet namespace bloat (default: true)
options.UseUtcTimestamp = true; // UTC timestamps (default: true, international rizz)
options.TimestampFormat = "yyyy-MM-ddTHH:mm:ss.fffK"; // ISO 8601 with milliseconds (default)
options.TimestampFirst = false; // false = RFC 5424 (level first), true = observability style (timestamp first)
});
dotnet litty CLI tool โ litty-fy your build and test output ๐งช
your app logs are litty but dotnet build and dotnet test output is still giving corporate energy? install the tool and never look at boring terminal output again no cap
# install the tool
dotnet tool install --global LittyLogs.Tool
# litty-fy your test output (auto-shows ITestOutputHelper output too)
dotnet litty test
# litty-fy your build output
dotnet litty build
# all args pass through to the underlying dotnet command
dotnet litty test --filter "FullyQualifiedName~MyTests"
dotnet litty build -c Release
before (boring test output) ๐
Passed! - Failed: 0, Passed: 66, Skipped: 0, Total: 66, Duration: 80 ms - LittyLogs.Tests.dll (net10.0)
after (bussin test output) ๐ฅ
[xUnit.net] scouting for tests in LittyLogs.Tests ๐
[xUnit.net] found the squad in LittyLogs.Tests ๐
[xUnit.net] lets gooo LittyLogs.Tests is cooking ๐ฅ
โ
LittyLogs.Tests.MyTest.SomeTest [26 ms]
[xUnit.net] LittyLogs.Tests absolutely ate no crumbs ๐
all tests ate and left no crumbs ๐
total vibes checked: 66
ate: 66 โ
cooked in 0.5 Seconds โฑ๏ธ
your own logs stay untouched
litty-logs only rewrites known framework messages. your custom log messages pass through with the bussin formatting (emojis, colors, short categories) but the actual message text stays exactly how you wrote it no cap
logger.LogInformation("my custom message stays exactly like this");
// output: [๐ฅ info] [2026-02-18T21:45:00.420Z] [MyService] my custom message stays exactly like this
examples
six example projects in examples/ so you can see litty-logs in every scenario:
| example | what it shows | run it |
|---|---|---|
WebApi |
ASP.NET Core minimal api with request logging (pass --json for JSON mode) |
just example web / just example web --json |
HostedService |
background service doing vibe checks in a loop | just example hosted |
Console |
side-by-side text + JSON output comparison | just example console |
Xunit |
litty-fied xUnit test output with all log levels | just example xunit |
Json |
structured JSON logging with emojis โ log aggregators eat good | just example json |
FileSink |
file sink with text + JSON output, rotation config | just example filesink |
development โ for the contributing besties ๐ ๏ธ
just recipes
this project uses just as the task runner. here are the vibes:
| recipe | what it does |
|---|---|
just build |
build the whole solution |
just test |
run all tests |
just litty-build |
build with litty-fied output ๐ฅ |
just litty-test |
test with litty-fied output ๐ฅ |
just pack |
pack all four NuGet packages |
just bump patch |
bump the patch version (also: minor, major) |
just bump-pre dev.1 |
slap a pre-release label on (e.g. 0.1.0-dev.1) |
just release patch |
gitflow release โ bump + git flow release start/finish ๐ |
just release-current |
gitflow release without bumping (for first release etc.) |
just hotfix patch |
start a gitflow hotfix branch off main ๐ |
just hotfix-finish |
finish a hotfix โ git flow hotfix finish |
just nuget-push |
manually push packages to nuget.org |
just example <name> |
run an example โ web, hosted, console, xunit, json, filesink ๐ฅ |
just setup-completions |
install shell tab-completions for just example <tab> |
shell completions
tab-complete just example <tab> to see all available examples. works with zsh and bash:
# auto-install to your shell rc file
just setup-completions
# or source manually
source completions/just.zsh # zsh
source completions/just.bash # bash
versioning
version lives in one place: Directory.Build.props. all four packages inherit from it. we use gitflow via the git flow CLI โ main is production, develop is the integration branch, releases and hotfixes get their own branches ๐ฅ
release flow (gitflow)
# from develop โ full gitflow ceremony (bump, release branch, merge, tag, cleanup)
just release patch # 0.1.0 โ 0.1.1
just release minor # 0.1.0 โ 0.2.0
just release major # 0.1.0 โ 1.0.0
# or release the current version without bumping (e.g. first release)
just release-current
# push everything to trigger the CI/CD pipeline
git push origin develop main v0.1.1
hotfix flow
# from main โ start a hotfix when something is bricked in prod
just hotfix patch
# make your fix, commit it, then finish
just hotfix-finish
# push everything
git push origin develop main v0.1.1
CI/CD
forgejo actions handles the pipeline on a self-hosted runner:
- CI โ builds, tests (with litty output ๐ฅ), and packs on every push/PR to
developandmain - Release โ triggered by
v*tags. builds, tests, packs, pushes to nuget.org, and creates releases on both Forgejo and GitHub with.nupkgassets attached ๐ฅ
see docs/runner-setup.md for runner setup instructions no cap
license
MIT โ share the vibes bestie โ๏ธ
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. 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. |
-
net10.0
- LittyLogs (>= 0.1.0-dev)
- Microsoft.Extensions.Logging (>= 10.0.3)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.