假设我有一个模型。公共记录 UserRegisterModel(字符串电子邮件,字符串密码);当记录此对象时,我想忽略电子邮件并屏蔽密码属性,例如.logger.LogInforma...
假设我有一个模型。
public record UserRegisterModel(string Email, string Password);
例如, Email
当记录此对象时,我想忽略 Password
并屏蔽
logger.LogInformation("User register request - {@obj}", obj);
Expected output:
"User register request - { "$type" : "UserRegisterModel", "Password" : "**********" }"
包 Destructurama.Attributed 提供了使用属性配置 Serilog 复杂对象日志记录的便捷方法。通过这些方法,您可以轻松忽略某些属性、应用屏蔽等。但是这种基于属性的方法确实会在项目中引入对 Serilog 的依赖,而这种依赖可能是不受欢迎的(Entity Framework Core 及其基于属性的模型配置方法也存在类似的问题)。
UserRegisterModel([property: NotLogged] string Email, [property: LogMasked] string Password);
我的解决方案: 我开发了一个库 Serilog.FluentDestructuring ,它通过引入 Fluent API 简化了解构过程。这使开发人员能够以干净、易读和简洁的方式定义对象解构行为,从而减少配置的冗长性。
代码示例:
public class ApplicationFluentDestructuringPolicy : FluentDestructuringPolicy
{
protected override void Configure(FluentDestructuringBuilder builder)
{
builder.Entity<UserRegisterRequest>(e =>
{
e.Property(p => p.Email)
.Mask();
e.Property(p => p.Password)
.Ignore();
});
}
}
var cfg = new LoggerConfiguration()
.Destructure.WithFluentDestructuringPolicy<ApplicationFluentDestructuringPolicy>()
...
请留下您想要的任何反馈。
我尝试找到我的想法的实现,但没有找到类似的东西,所以我自己写了它。