feat: slightly more debug logs, enrich message events with extra data

This commit is contained in:
sam 2024-11-26 21:25:10 +01:00
parent c06376dfda
commit 27e77eeaed
Signed by: sam
GPG key ID: 5F3C3C1B3166639D
5 changed files with 79 additions and 5 deletions

View file

@ -0,0 +1,58 @@
using Remora.Discord.API.Abstractions.Gateway.Events;
using Remora.Rest.Core;
using Serilog.Context;
namespace Catalogger.Backend.Extensions;
public static class LogUtils
{
public static IDisposable Enrich<T>(T evt)
where T : IGatewayEvent
{
var type = ("Event", typeof(T).Name);
return evt switch
{
IMessageDelete md => PushProperties(
type,
("GuildId", md.GuildID),
("ChannelId", md.ChannelID),
("MessageId", md.ID)
),
IMessageUpdate mc => PushProperties(
type,
("GuildId", mc.GuildID),
("ChannelId", mc.ChannelID),
("MessageId", mc.ID)
),
IMessageDeleteBulk mdb => PushProperties(
type,
("GuildId", mdb.GuildID),
("ChannelId", mdb.ChannelID),
("MessageIds", mdb.IDs)
),
_ => PushProperties(type),
};
}
public static IDisposable PushProperties(params (string, object?)[] properties) =>
new MultiDisposable(
properties
.Select(p =>
{
if (p.Item2 is Optional<Snowflake> s)
return LogContext.PushProperty(p.Item1, s.IsDefined() ? s.Value : null);
return LogContext.PushProperty(p.Item1, p.Item2);
})
.ToArray()
);
private record MultiDisposable(IDisposable[] Entries) : IDisposable
{
public void Dispose()
{
foreach (var e in Entries)
e.Dispose();
}
}
}