From 28d4dd2b99d211222b19a84811ab88c263d96ec3 Mon Sep 17 00:00:00 2001 From: Nicholas Blumhardt Date: Thu, 26 Mar 2020 08:32:18 +1000 Subject: [PATCH] Spike for #182, allow an ILogger to be specified --- .../AspNetCore/RequestLoggingMiddleware.cs | 5 ++++- .../AspNetCore/RequestLoggingOptions.cs | 9 +++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/Serilog.AspNetCore/AspNetCore/RequestLoggingMiddleware.cs b/src/Serilog.AspNetCore/AspNetCore/RequestLoggingMiddleware.cs index e6c17f1..4472e5d 100644 --- a/src/Serilog.AspNetCore/AspNetCore/RequestLoggingMiddleware.cs +++ b/src/Serilog.AspNetCore/AspNetCore/RequestLoggingMiddleware.cs @@ -24,6 +24,7 @@ namespace Serilog.AspNetCore { + // ReSharper disable once ClassNeverInstantiated.Global class RequestLoggingMiddleware { readonly RequestDelegate _next; @@ -31,6 +32,7 @@ class RequestLoggingMiddleware readonly MessageTemplate _messageTemplate; readonly Action _enrichDiagnosticContext; readonly Func _getLevel; + readonly ILogger _logger; static readonly LogEventProperty[] NoProperties = new LogEventProperty[0]; public RequestLoggingMiddleware(RequestDelegate next, DiagnosticContext diagnosticContext, RequestLoggingOptions options) @@ -42,6 +44,7 @@ public RequestLoggingMiddleware(RequestDelegate next, DiagnosticContext diagnost _getLevel = options.GetLevel; _enrichDiagnosticContext = options.EnrichDiagnosticContext; _messageTemplate = new MessageTemplateParser().Parse(options.MessageTemplate); + _logger = options.Logger?.ForContext(); } // ReSharper disable once UnusedMember.Global @@ -73,7 +76,7 @@ public async Task Invoke(HttpContext httpContext) bool LogCompletion(HttpContext httpContext, DiagnosticContextCollector collector, int statusCode, double elapsedMs, Exception ex) { - var logger = Log.ForContext(); + var logger = _logger ?? Log.ForContext(); var level = _getLevel(httpContext, elapsedMs, ex); if (!logger.IsEnabled(level)) return false; diff --git a/src/Serilog.AspNetCore/AspNetCore/RequestLoggingOptions.cs b/src/Serilog.AspNetCore/AspNetCore/RequestLoggingOptions.cs index 327e468..6a69f55 100644 --- a/src/Serilog.AspNetCore/AspNetCore/RequestLoggingOptions.cs +++ b/src/Serilog.AspNetCore/AspNetCore/RequestLoggingOptions.cs @@ -16,6 +16,8 @@ using Serilog.Events; using System; +// ReSharper disable UnusedAutoPropertyAccessor.Global + namespace Serilog.AspNetCore { /// @@ -50,6 +52,13 @@ public class RequestLoggingOptions /// public Action EnrichDiagnosticContext { get; set; } + + /// + /// The logger through which request completion events will be logged. The default is to use the + /// static class. + /// + public ILogger Logger { get; set; } + internal RequestLoggingOptions() { } } }