Add Elastic-bound logging of (almost) all database update events
This commit is contained in:
30
PluralKit.Core/Logging/PatchObjectDestructuring.cs
Normal file
30
PluralKit.Core/Logging/PatchObjectDestructuring.cs
Normal file
@@ -0,0 +1,30 @@
|
||||
using System.Collections.Generic;
|
||||
|
||||
using Serilog.Core;
|
||||
using Serilog.Events;
|
||||
|
||||
namespace PluralKit.Core
|
||||
{
|
||||
public class PatchObjectDestructuring: IDestructuringPolicy
|
||||
{
|
||||
public bool TryDestructure(object value, ILogEventPropertyValueFactory factory,
|
||||
out LogEventPropertyValue result)
|
||||
{
|
||||
result = null;
|
||||
if (!(value is PatchObject po)) return false;
|
||||
|
||||
var propList = new List<LogEventProperty>();
|
||||
foreach (var props in po.GetType().GetProperties())
|
||||
{
|
||||
var propValue = props.GetValue(po);
|
||||
if (propValue is IPartial p && p.IsPresent)
|
||||
propList.Add(new LogEventProperty(props.Name, factory.CreatePropertyValue(p.RawValue)));
|
||||
else if (!(propValue is IPartial))
|
||||
propList.Add(new LogEventProperty(props.Name, factory.CreatePropertyValue(propValue)));
|
||||
}
|
||||
|
||||
result = new StructureValue(propList);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user