Skip to content

Latest commit

 

History

History
60 lines (42 loc) · 2.32 KB

README.md

File metadata and controls

60 lines (42 loc) · 2.32 KB

Serilog.Sinks.BrowserHttp Build status

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 POSTed 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.