feat(core): add optional SQL query logging

This commit is contained in:
sam 2024-05-22 02:31:05 +02:00
parent b95fb76cd4
commit 6aed05af06
Signed by: sam
GPG key ID: B4EF20DDE721CAA1
8 changed files with 56 additions and 31 deletions

View file

@ -1,5 +1,6 @@
using Foxchat.Core;
using Foxchat.Core.Database;
using Foxchat.Core.Extensions;
using Foxchat.Identity.Database.Models;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Design;
@ -10,6 +11,7 @@ namespace Foxchat.Identity.Database;
public class IdentityContext : IDatabaseContext
{
private readonly NpgsqlDataSource _dataSource;
private readonly ILoggerFactory? _loggerFactory;
public override DbSet<Instance> Instance { get; set; }
public DbSet<Account> Accounts { get; set; }
@ -18,7 +20,7 @@ public class IdentityContext : IDatabaseContext
public DbSet<Token> Tokens { get; set; }
public DbSet<GuildAccount> GuildAccounts { get; set; }
public IdentityContext(InstanceConfig config)
public IdentityContext(InstanceConfig config, ILoggerFactory? loggerFactory)
{
var connString = new NpgsqlConnectionStringBuilder(config.Database.Url)
{
@ -29,12 +31,14 @@ public class IdentityContext : IDatabaseContext
var dataSourceBuilder = new NpgsqlDataSourceBuilder(connString);
dataSourceBuilder.UseNodaTime();
_dataSource = dataSourceBuilder.Build();
_loggerFactory = loggerFactory;
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder
.UseNpgsql(_dataSource, o => o.UseNodaTime())
.UseSnakeCaseNamingConvention();
=> optionsBuilder
.UseNpgsql(_dataSource, o => o.UseNodaTime())
.UseSnakeCaseNamingConvention()
.UseLoggerFactory(_loggerFactory);
protected override void ConfigureConventions(ModelConfigurationBuilder configurationBuilder)
{
@ -67,6 +71,6 @@ public class DesignTimeIdentityContextFactory : IDesignTimeDbContextFactory<Iden
// Get the configuration as our config class
.Get<InstanceConfig>() ?? new();
return new IdentityContext(config);
return new IdentityContext(config, null);
}
}

View file

@ -1,6 +1,7 @@
using Newtonsoft.Json.Serialization;
using Serilog;
using Foxchat.Core;
using Foxchat.Core.Extensions;
using Foxchat.Identity;
using Foxchat.Identity.Database;
using Foxchat.Identity.Services;
@ -11,7 +12,7 @@ var builder = WebApplication.CreateBuilder(args);
var config = builder.AddConfiguration<InstanceConfig>("identity.ini");
builder.AddSerilog(config.LogEventLevel);
builder.AddSerilog();
await BuildInfo.ReadBuildInfo();
Log.Information("Starting Foxchat.Identity {Version} ({Hash})", BuildInfo.Version, BuildInfo.Hash);

View file

@ -2,11 +2,6 @@ Host = localhost
Port = 7611
Domain = id.fox.localhost
; The level to log things at. Valid settings: Verbose, Debug, Information, Warning, Error, Fatal
LogEventLevel = Debug
; Optional logging to Seq
SeqLogUrl = http://localhost:5341
[Database]
; The database URL in ADO.NET format.
Url = "Host=localhost;Database=foxchat_cs_ident;Username=foxchat;Password=password"
@ -15,3 +10,11 @@ Url = "Host=localhost;Database=foxchat_cs_ident;Username=foxchat;Password=passwo
Timeout = 5
; The maximum number of open connections. Defaults to 50.
MaxPoolSize = 500
[Logging]
; The level to log things at. Valid settings: Verbose, Debug, Information, Warning, Error, Fatal
LogEventLevel = Debug
; Whether to log SQL queries.
LogQueries = true
; Optional logging to Seq
SeqLogUrl = http://localhost:5341