JLogDashboard 0.1.8

dotnet add package JLogDashboard --version 0.1.8
                    
NuGet\Install-Package JLogDashboard -Version 0.1.8
                    
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="JLogDashboard" Version="0.1.8" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="JLogDashboard" Version="0.1.8" />
                    
Directory.Packages.props
<PackageReference Include="JLogDashboard" />
                    
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 JLogDashboard --version 0.1.8
                    
#r "nuget: JLogDashboard, 0.1.8"
                    
#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 JLogDashboard@0.1.8
                    
#: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=JLogDashboard&version=0.1.8
                    
Install as a Cake Addin
#tool nuget:?package=JLogDashboard&version=0.1.8
                    
Install as a Cake Tool

JLogDashboard

Build NuGet License

English | 简体中文

JLogDashboard is a lightweight ASP.NET Core dashboard for viewing NLog, log4net, and Serilog file logs across multiple projects.

It is designed for the common operational scenario where multiple .NET services write plain-text log files on one server, and engineers need a simple way to inspect recent logs, filter noise, and review exception stacks without introducing a separate log platform.

Why JLogDashboard

  • Lightweight: no database, no background indexing service, no frontend build chain.
  • Practical: supports common file-based .NET logging setups with minimal integration work.
  • Deployable: can be embedded into an existing ASP.NET Core application or hosted as a standalone dashboard.
  • Safer by default: includes built-in Basic Auth and a lightweight lockout mechanism for repeated failed credentials.

Features

  • Multi-project log directory configuration.
  • Compatible with common NLog, log4net, and Serilog text layouts.
  • Explicit parser modes for NLog layout strings, log4net PatternLayout strings, Serilog outputTemplate strings, delimited logs, and regex logs.
  • Project, level, keyword, exclude-keyword, and pagination filtering.
  • Tail-window reading for large files to avoid loading entire log files into memory.
  • Exception stack trace grouping for unmatched continuation lines.
  • Built-in full-width Dashboard UI with project switching, filters, paging, refresh, internal scrolling, automatic initial loading, and current-page duplicate grouping with count tags.
  • Standalone host for separate port and reverse-proxy deployments.
  • Built-in Basic Auth with per-client failed-attempt lockout.
  • Built-in zh-CN and en-US UI text resources.

When To Use

JLogDashboard is a good fit when:

  • your applications already write logs to local files;
  • your team needs a lightweight internal dashboard instead of a full observability stack;
  • you want a self-hosted log viewer that can be deployed in minutes;
  • you prefer direct filesystem access over log shipping and centralized ingestion.

It is not intended to replace Elasticsearch, Loki, Seq, Splunk, or similar systems for large-scale centralized log analytics.

Installation

dotnet add package JLogDashboard

NuGet package: https://www.nuget.org/packages/JLogDashboard

Quick Start

Option 1: Embed into an ASP.NET Core application

using JLogDashboard.AspNetCore;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddJLogDashboard(options =>
{
    options.RoutePrefix = "/jlog";
    options.MaxFileBytes = 10 * 1024 * 1024;

    options.BasicAuth.Enabled = true;
    options.BasicAuth.Username = "admin";
    options.BasicAuth.PasswordSha256 = "replace-with-sha256-hex";

    options.Projects.Add(new()
    {
        Name = "api.backend",
        DirectoryPath = "/var/log/api.backend",
        Provider = "nlog",
        FileSearchPattern = "*.log",
        Recursive = false,
        Parser =
        {
            Mode = "nlog-layout",
            Layout = "${longdate}|${event-properties:item=EventId}|${level}|${logger}${newline}${message}${exception:format=tostring}"
        }
    });
});

var app = builder.Build();

app.MapJLogDashboard();
app.Run();

Open https://your-domain/jlog.

Runnable repository sample: samples/JLogDashboard.SampleWeb (admin / sample-password)

Parser configuration examples

Dashboard runtime actions stay focused on browsing and filtering logs. Parser rules, log directories, authentication, ports, and route paths are configured in the host application through AddJLogDashboard(...) or the JLogDashboard configuration section.

Use explicit parser modes when the built-in auto recognizers cannot reliably identify your log structure:

options.Projects.Add(new()
{
    Name = "api.nlog",
    DirectoryPath = "/var/log/api.nlog",
    Provider = "nlog",
    Parser =
    {
        Mode = "nlog-layout",
        Layout = "${longdate}|${event-properties:item=EventId}|${level}|${logger}${newline}${message}${exception:format=tostring}"
    }
});

options.Projects.Add(new()
{
    Name = "legacy.log4net",
    DirectoryPath = "/var/log/legacy",
    Provider = "log4net",
    Parser =
    {
        Mode = "log4net-pattern",
        Layout = "%date{yyyy-MM-dd HH:mm:ss,fff} [%thread] %-5level %logger - %message%newline%exception"
    }
});

options.Projects.Add(new()
{
    Name = "orders.serilog",
    DirectoryPath = "/var/log/orders",
    Provider = "serilog",
    Parser =
    {
        Mode = "serilog-template",
        Layout = "{Timestamp:yyyy-MM-dd HH:mm:ss.fff} [{Level:u3}] {SourceContext} {Message:lj}{NewLine}{Exception}"
    }
});

These template parsers intentionally support the common file-log subset needed for browsing: timestamp, level, logger/source context, message, exception, newline, and ignored metadata fields. For unusual formats, use delimited or regex.

Option 2: Run the standalone host

The repository includes src/JLogDashboard.Host for teams that want to expose the dashboard on a dedicated port or behind a reverse proxy.

dotnet run --project src/JLogDashboard.Host

Default development URL:

http://localhost:5088/jlog

The standalone host bind address and port can be customized through Urls in appsettings.json or the ASPNETCORE_URLS environment variable. The dashboard path can be customized through JLogDashboard:RoutePrefix.

Example:

ASPNETCORE_URLS=http://0.0.0.0:5099 dotnet run --project src/JLogDashboard.Host

For a production-style sample, see examples/appsettings.sample.json.

Documentation Map

Security Notes

  • Use HTTPS, VPN, or a trusted internal reverse proxy when the dashboard is reachable outside a private network.
  • Prefer PasswordSha256 over plain-text passwords in any shared environment.
  • Startup diagnostics classify configuration issues into warnings and fatal errors. Fatal dashboard misconfiguration blocks dashboard requests with controlled 503 responses without crashing the host application.
  • Anonymous requests return 401 challenges and do not consume lockout attempts.
  • Repeated invalid credentials trigger a temporary lockout for the same client IP.
  • When deployed behind a reverse proxy, forward X-Forwarded-For so the lockout mechanism can identify the actual client.
  • Do not point log directories at broad parent folders that may contain unrelated secrets or configuration files.
  • Dashboard runtime faults are isolated to the dashboard route. Common log-read and endpoint failures should not break unrelated host application endpoints.

Reverse Proxy

JLogDashboard does not generate reverse-proxy configuration in the Dashboard UI. Mount the Dashboard in the host application with RoutePrefix, then configure your infrastructure separately. For internet-reachable deployments, use HTTPS, VPN, or a trusted internal proxy and preserve X-Forwarded-For when you rely on the built-in lockout mechanism.

Limitations

  • File-based log viewing only; there is no centralized storage or query index.
  • Designed for operational inspection, not long-term analytics or alerting.
  • Built-in authentication is intentionally simple and should be treated like an internal-tool guard, not a full identity system.
  • Layout/template parsing is a pragmatic subset of NLog, log4net, and Serilog formatting, not a full reimplementation of every renderer or property formatter.
  • Duplicate grouping is a Dashboard UI presentation feature for the current page. The search API and pagination totals still represent raw log entries.

Additional Resources

Development

dotnet restore
dotnet build JLogDashboard.sln
dotnet test JLogDashboard.sln
dotnet pack src/JLogDashboard/JLogDashboard.csproj -c Release -o artifacts/packages

License

MIT

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
0.1.8 94 5/29/2026
0.1.7 99 5/19/2026
0.1.6 90 5/19/2026
0.1.5 93 5/19/2026
0.1.4 90 5/19/2026
0.1.3 91 5/19/2026
0.1.2 92 5/19/2026

Added project-level NLog layout, log4net PatternLayout, Serilog outputTemplate, delimited, and regex parser configuration; hardened missing template fallback; reworked the dashboard UI with automatic loading, internal scrolling, duplicate-row grouping with count tags, source files under timestamps, and removed nginx-specific UI generation in favor of host-level configuration.