serilog-sinks-browserhttp
serilog-sinks-browserhttp copied to clipboard
Serilog sink for client-side Blazor, with matching ASP.NET Core server relay
Serilog.Sinks.BrowserHttp 
Note: this project is currently at the proof-of-concept stage, and may eat your laundry.
A Serilog sink for client-side Blazor that posts batched events using the browser's HTTP stack. These can be sent to any remote HTTP endpoint, including the app's origin server. A companion package, Serilog.AspNetCore.Ingestion, is also published from this repository, and can be used to relay events from the client to Serilog running in the ASP.NET Core server process.
Getting started
In a Blazor client (WASM) app, first install Serilog.Sinks.BrowserHttp:
dotnet add package Serilog.Sinks.BrowserHttp
The sink is enabled using WriteTo.BrowserHttp
:
var builder = WebAssemblyHostBuilder.CreateDefault(args);
Log.Logger = new LoggerConfiguration()
.MinimumLevel.ControlledBy(levelSwitch)
.WriteTo.BrowserConsole()
.WriteTo.BrowserHttp($"{builder.HostEnvironment.BaseAddress}ingest")
.CreateLogger();
Log.Information("Hello, browser!");
Events will be POST
ed in newline-delimited JSON batches to the given URL. See
Serilog.Formatting.Compact for a description of the JSON
schema that is used.
Server-side relay for ASP.NET Core
To use the server-side relay in an ASP.NET Core app that uses Serilog, install Serilog.AspNetCore.Ingestion:
dotnet add package Serilog.AspNetCore.Ingestion
Then, add UseSerilogIngestion()
to the app builder in Startup.cs:
app.UseSerilogIngestion();
The client app should be configured with LoggingLevelSwitch
so that the server can control the client's logging level. An endpoint address is not required. For example:
// In a Blazor WASM Program.cs file
var builder = WebAssemblyHostBuilder.CreateDefault(args);
var levelSwitch = new LoggingLevelSwitch();
Log.Logger = new LoggerConfiguration()
.MinimumLevel.ControlledBy(levelSwitch)
.WriteTo.BrowserHttp($"{builder.HostEnvironment.BaseAddress}ingest", controlLevelSwitch: levelSwitch)
.CreateLogger();
Log.Information("Hello, browser!");
See the /samples
directory in this repository for a working end-to-end example.