LittyLogs.File 0.1.0-dev

This is a prerelease version of LittyLogs.File.
There is a newer version of this package available.
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
                    
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="LittyLogs.File" Version="0.1.0-dev" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="LittyLogs.File" Version="0.1.0-dev" />
                    
Directory.Packages.props
<PackageReference Include="LittyLogs.File" />
                    
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 LittyLogs.File --version 0.1.0-dev
                    
#r "nuget: LittyLogs.File, 0.1.0-dev"
                    
#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 LittyLogs.File@0.1.0-dev
                    
#: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=LittyLogs.File&version=0.1.0-dev&prerelease
                    
Install as a Cake Addin
#tool nuget:?package=LittyLogs.File&version=0.1.0-dev&prerelease
                    
Install as a Cake Tool

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 develop and main
  • Release โ€” triggered by v* tags. builds, tests, packs, pushes to nuget.org, and creates releases on both Forgejo and GitHub with .nupkg assets attached ๐Ÿ”ฅ

see docs/runner-setup.md for runner setup instructions no cap

license

MIT โ€” share the vibes bestie โœŒ๏ธ

Product 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

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
0.2.3 128 2/23/2026
0.2.2 92 2/22/2026
0.2.1 110 2/22/2026
0.2.0 89 2/22/2026
0.1.4 99 2/20/2026
0.1.3 90 2/19/2026
0.1.2-dev 88 2/19/2026
0.1.1-dev 86 2/19/2026
0.1.0-dev 86 2/19/2026