问题
如何为基类配置Serilog解构,以便所有子类都以相同的方式解构?
new LoggerConfiguration()
.Destructure.ByTransforming<BaseAbstractClass>(t =>
new { TaskId = t.Id, JobId = t.JobId})
var childClass = new ChildClass { Id = 1, JobId = 1, SomeOtherPropertyIDoNotCareAbout = "value"};
Log.Information("{@ChildClass}", childClass )
public abstract class BaseAbstractClass
{
public int Id { get; set; }
public int JobId { get; set; }
}
public class ChildClass: BaseAbstractClass
{
public string SomeOtherPropertyIDoNotCareAbout { get; set; }
}上下文
我得到了以下Serilog配置:
new LoggerConfiguration()
.Destructure.ByTransforming<Task>(t =>
new { TaskId = t.Id, JobId = t.JobId})基类的位置。
public abstract class Task
{
public int Id { get; set; }
public int JobId { get; set; }
public Job Job { get; set; }
public TaskType Type { get; set; }
public string Description { get; set; }
public int Order { get; set; }
public bool Enabled { get; set; }
}
public enum TaskType
{
StoredProcedure
}儿童班是:
public class StoredProcedure : Task
{
public string ServerDnsName { get; set; }
public string DatabaseName { get; set; }
public string StoredProcedureAndSchema { get; set; }
}初始化模拟storedProcedure任务:
var storedProcedure = new StoredProcedure()
{
Id = 1, Description = "description", Enabled = true, Order = 1,
JobId = 1, Job = new Job { Id = 1, Description = "description", Name = "test"}
};当我运行这个:
Log.Information("Test dec {@Task}", storedProcedure);或者这个:
Log.Information("Test dec {@Task}", (Task)storedProcedure);Serilog不按配置解构对象。
如果我使用此配置:
new LoggerConfiguration()
.Destructure.ByTransforming<StoredProcedure>(t =>
new { TaskId = t.Id, JobId = t.JobId})Serilog很好地解构对象,并且只记录这两个属性(TaskId和JobId)。
发布于 2021-01-18 12:45:21
我能够通过以下方法解决这个问题:
.Destructure.ByTransformingWhere<Task>(t => typeof(Task).IsAssignableFrom(t), t => new { TaskId = t.Id, t.JobId})现在这一切都很好:
var storedProcedure = new StoredProcedure()
{
Id = 1, Description = "description", Enabled = true, Order = 1,
JobId = 1, Job = new Job { Id = 1, Description = "description", Name = "test"}
};
Log.Information("Test dec {@Task}", storedProcedure);https://stackoverflow.com/questions/65773392
复制相似问题