8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

使用 Fluent API 控制如何将复杂对象记录到 Serilog

Mannopson 1月前

17 0

假设我有一个模型。公共记录 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>()
    ...

请留下您想要的任何反馈。

我尝试找到我的想法的实现,但没有找到类似的东西,所以我自己写了它。

帖子版权声明 1、本帖标题:使用 Fluent API 控制如何将复杂对象记录到 Serilog
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Mannopson在本站《.net》版块原创发布, 转载请注明出处!
最新回复 (0)
返回
作者最近主题: