Skip to content

Serilog not logging to Database #263

@nssidhu

Description

@nssidhu

I am using Blazor Wasm Hosted Project in VS2022 preview 3.1 with .NET 6 preview 7.

My program.cs is using new minimal API approach.

The problem i am running into is that Table Serilog is not getting created, even if i manually create the table there is not log inserted into the table.

In the F12 Browser Tools i do see Network Request going from Blazor wasm client to server, Serilog.Debugging.SelfLog.Enable never hits.
Request URL: https://localhost:5001/ingest
Request Method: POST
Status Code: 201

What am i missing ?

Here is the program.cs

program.cs

using XXXXXXX.Server.SerilogEnrichers;
using Microsoft.ApplicationInsights.AspNetCore.Extensions;
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Authentication.OpenIdConnect;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http.Extensions;
using Microsoft.AspNetCore.HttpsPolicy;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc.Infrastructure;
using Microsoft.AspNetCore.ResponseCompression;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
using Microsoft.Extensions.Hosting;
using Microsoft.IdentityModel.Tokens;
using Microsoft.OpenApi.Models;
using XXXXXXXX.Server.SignalRHub;
using Newtonsoft.Json.Serialization;
using Serilog;
using Serilog.Events;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IdentityModel.Tokens.Jwt;
using System.Linq;
using System.Reflection;
using System.Security.Claims;
using System.Text;
using System.Threading.Tasks;
using XXXXXXX.Server;
using Serilog.Core;
using GetInLineV6New.Server.DbModels;
using Microsoft.AspNetCore.SignalR.Client;
using Microsoft.AspNetCore.Components;

var levelSwitch = new LoggingLevelSwitch();
levelSwitch.MinimumLevel = LogEventLevel.Verbose;
Log.Logger = (Serilog.ILogger)new LoggerConfiguration()
  .MinimumLevel.ControlledBy(levelSwitch)
  // .Filter.ControlledBy(filterSwitch)
  //  .Filter.ByExcluding(expr)
  .Enrich.FromLogContext()
  .Enrich.WithUserName()
  .Enrich.WithIPAddress()
  .Enrich.WithProperty("FromSerilOg", "XXXXXXX")
  .CreateBootstrapLogger();

Serilog.Debugging.SelfLog.Enable(msg =>
{
    Console.WriteLine(msg);
    Debugger.Break();
});

var builder = WebApplication.CreateBuilder(args);


Host.CreateDefaultBuilder(args)
    .UseSerilog((context, services, configuration) => configuration
        .ReadFrom.Configuration(context.Configuration)
        .ReadFrom.Services(services)
        );


ApplicationInsightsServiceOptions aiOptions = new ApplicationInsightsServiceOptions();
aiOptions.EnableAdaptiveSampling = false;
aiOptions.InstrumentationKey = builder.Configuration["ApplicationInsights:InstrumentationKey"];
aiOptions.EnableQuickPulseMetricStream = true;
builder.Services.AddApplicationInsightsTelemetry();


builder.Services.AddHttpContextAccessor();
builder.Services.TryAddSingleton<IActionContextAccessor, ActionContextAccessor>();
builder.Services.AddSignalR();

builder.Services.AddControllersWithViews();
builder.Services.AddRazorPages();
builder.Services.AddResponseCompression(opts =>
{
    opts.MimeTypes = ResponseCompressionDefaults.MimeTypes.Concat(
        new[] { "application/octet-stream" });
});


builder.Services.AddEndpointsApiExplorer();

builder.Services.AddHttpContextAccessor();

var app = builder.Build();

app.UseResponseCompression();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseDeveloperExceptionPage();
    app.UseWebAssemblyDebugging();

}
else
{
    app.UseExceptionHandler("/Error");
    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
    app.UseHsts();
}

app.UseHttpsRedirection();

app.UseSerilogIngestion();
//app.UseSerilogRequestLogging();  //This throws error


app.UseBlazorFrameworkFiles();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthentication();

app.UseAuthorization();

app.UseEndpoints(endpoints =>
{
    endpoints.MapRazorPages();
    endpoints.MapControllers();
    endpoints.MapControllerRoute(
       name: "default",
       pattern: "{controller=Home}/{action=Index}/{id?}");
    endpoints.MapHub<XXXXeHub>("/chathub");
    endpoints.MapFallbackToFile("index.html");

});


app.Run()

appsetting.json

{
  "ConnectionStrings": {
    "DatabaseConsString": "Server=tcp:XXXXXXX.database.windows.net,1433;Initial Catalog=XXXXX;Persist Security Info=False;User ID=XXXXXXXXX;Password=XXXXXXXXXXXMultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;"

  },
  "ApplicationInsights": {
   
    "InstrumentationKey": "XXXXXXXXX7a515"
  },
  "RedisCache": {
    "ConnectionString": "XXXXXXXXXXX.redis.cache.windows.net:6380,password=XXXXXXXXX=,ssl=True,abortConnect=False"
  },
  "sendGrid": {
    "ApiKey": "XXXXXXXXX",
    "FromEmail": "ABC@EFG.com",
    "FromEmailName": "Emailt"
  },
  "Twilio": {
    "AccountSID": "XXXXXXX",
    "AuthToken": "XXXX",
    "FromNumber": "+11234567890"
  },
  "Jwt": {
    "key": "MyApplicationKey",
    "Issuer": "MyAppName",
    "Audience": "MyAppAudience"
  },
  "Serilog": {
    "Properties": {
      "ApplicationName": "BlazorWasm",
      "Serilog": "AppInsightFromSerilog"
    },
    "MinimumLevel": { //https://docs.datalust.co/v2/docs/logging-levels  (Verbose,Debug,Information,Warning,Error,Fatal)
      "Default": "Information",
      "Override": {
        "Microsoft": "Warning",
        "Microsoft.Hosting.Lifetime": "Information"
      }
    },
    "Using": [ "XXXXXXX.Server", "Serilog.Sinks.ApplicationInsights" ],
    "Enrich": [
      "FromLogContext",
      "WithUserName",
      "WithIPAddress"
    ],

    "Filter": [
      {
        "Name": "ByExcluding",
        "Args": {
          "expression": "RequestPath like '%swagger%'  or RequestPath like '%_framework%' or Contains(@m, 'Hosting environment:')  or Contains(@m, 'Now listening on:') or Contains(@m, 'HTTP') or Contains(@m, 'Application started. Press Ctrl+C to shut down.') or Contains(@m, 'Content root path:')"
          //https://github.com/serilog/serilog-expressions
        }
      }
    ],
    "WriteTo": [
                  {
                    "Name": "File",
                    "Args": {
                      "path": "./logs/log-.txt",
                      "rollingInterval": "Day"
                    }
                  },
                  {
                    "Name": "ApplicationInsights",
                    "Args": {
                      "restrictedToMinimumLevel": "Information",
                      "telemetryConverter": "Serilog.Sinks.ApplicationInsights.Sinks.ApplicationInsights.TelemetryConverters.TraceTelemetryConverter, Serilog.Sinks.ApplicationInsights"
                    }
                  },
                  {
                    "Name": "MSSqlServer",
                    "Args": {
                      "connectionString": "Server=tcp:XXXXXXXX.database.windows.net,1433;Initial Catalog=XXXXXXX;Persist Security Info=False;User ID=XXXXXXAppUser;Password=XXXXXXXXXX;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;",
                      "sinkOptionsSection": {
                        "tableName": "SeriLog",

                        "formatter": "Serilog.Formatting.Compact.CompactJsonFormatter, Serilog.Formatting.Compact",
                        "schemaName": "EventLogging",
                        "autoCreateSqlTable": true
                      },
                      "columnOptionsSection": {
                        //https://github.com/serilog/serilog-sinks-mssqlserver#custom-property-columns
                        "additionalColumns": [
                          {
                            "ColumnName": "InstanceId",
                            "PropertyName": "InstanceId",
                            "DataType": "varchar",
                            "DataLength": 80
                          },
                          {
                            "ColumnName": "ConnectionId",
                            "PropertyName": "ConnectionId",
                            "DataType": "varchar",
                            "DataLength": 80
                          },
                          {
                            "ColumnName": "RequestId",
                            "PropertyName": "RequestId",
                            "DataType": "varchar",
                            "DataLength": 80
                          },
                          {
                            "ColumnName": "ActionId",
                            "PropertyName": "ActionId",
                            "DataType": "varchar",
                            "DataLength": 80
                          },
                          {
                            "ColumnName": "OperationId",
                            "PropertyName": "OperationId",
                            "DataType": "varchar",
                            "DataLength": 80
                          },
                          {
                            "ColumnName": "ActionName",
                            "PropertyName": "ActionName",
                            "DataType": "varchar",
                            "DataLength": 5000
                          },
                          {
                            "ColumnName": "EnvironmentName",
                            "PropertyName": "EnvironmentName",
                            "DataType": "varchar",
                            "DataLength": 50
                          },
                          {
                            "ColumnName": "ApplicationName",
                            "PropertyName": "ApplicationName",
                            "DataType": "varchar",
                            "DataLength": 5000
                          },
                          {
                            "ColumnName": "UserName",
                            "PropertyName": "UserName",
                            "DataType": "varchar",
                            "DataLength": 1000
                          },
                          {
                            "ColumnName": "IPAddress",
                            "PropertyName": "IPAddress",
                            "DataType": "varchar",
                            "DataLength": 50
                          },
                          {
                            "ColumnName": "Source",
                            "PropertyName": "Source",
                            "DataType": "varchar",
                            "DataLength": 50
                          },
                          {
                            "ColumnName": "SourceContext",
                            "PropertyName": "SourceContext",
                            "DataType": "varchar",
                            "DataLength": 1000
                          },
                          {
                            "ColumnName": "Origin",
                            "PropertyName": "Origin",
                            "DataType": "varchar",
                            "DataLength": 100
                          },
                          {
                            "ColumnName": "OperationType",
                            "PropertyName": "OperationType",
                            "DataType": "varchar",
                            "DataLength": 1000
                          },
                          {
                            "ColumnName": "RequestPath",
                            "PropertyName": "RequestPath",
                            "DataType": "varchar",
                            "DataLength": 1000
                          },
                          {
                            "ColumnName": "MethodName",
                            "PropertyName": "MethodName",
                            "DataType": "varchar",
                            "DataLength": 1000
                          }
                        ],
                        "addStandardColumns": [ "LogEvent" ],
                        "removeStandardColumns": [ "MessageTemplate", "Properties" ],
                        "logEvent": {
                          "excludeAdditionalProperties": true,
                          "excludeStandardColumns": true
                        }
                      },
                      "restrictedToMinimumLevel": "Information" // (Verbose,Debug,Information,Warning,Error,Fatal)
                    }

                  }
              ]
  },
  "AllowedHosts": "*"

}

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions