【问题标题】:writing inside a specific column Serilog ASP.NET MVC C#在特定列中写入 Serilog ASP.NET MVC C#
【发布时间】:2016-10-10 10:45:04
【问题描述】:

我正在使用 C# 在 ASP.NET MVC 中开发 Serilog。

我必须指定日志类型,一种用于管理员级别,一种用于用户级别。

根据微软会员计划,我想创建一个名为“角色”的额外列,其中包含 1 个管理员或 2 个用户。

我使用了这个代码:

string connectionString = ConfigurationManager.........;

            Log.Logger = new LoggerConfiguration()
                .MinimumLevel.Debug()
                .WriteTo.MSSqlServer(connectionString, "Logs")
                .Enrich.WithExceptionDetails()
                .Enrich.With<HttpRequestIdEnricher>()
                .Enrich.FromLogContext()
                .CreateLogger();

            Log.Information("Web4 starting");
            Log.Information("log location: {0}", AppDomain.CurrentDomain.BaseDirectory);

我已经将该列添加到数据库中

创建后如何写入列?

【问题讨论】:

    标签: c# asp.net asp.net-mvc serilog


    【解决方案1】:

    ColumnOptions 允许您告诉 SQL Server 接收器有关该列的信息:

    var columnOptions = new ColumnOptions
    {
      AdditionalDataColumns = new Collection<DataColumn>
      {
        new DataColumn {DataType = typeof (string), ColumnName = "Role"}
      }
    };
    

    传递给记录器的配置方法:

    .WriteTo.MSSqlServer(connectionString, "Logs", columnOptions: columnOptions)
    

    数据需要附加到每个日志事件:

    class RoleEnricher : ILogEventEnricher
    {
      public void Enrich(LogEvent logEvent, ILogEventPropertyFactory pf)
      {
        var role = // Get the role from your identity provider
        logEvent.AddOrUpdateProperty(pf.CreateProperty("Role", role));
      }
    }
    

    然后配置记录器以使用浓缩器:

    .Enrich.With<RoleEnricher>()
    

    【讨论】:

    • 是否可以在此解决方案中访问或以其他方式将 HttpContext 注入到 RoleEnricher 中?我试图从上下文中获取 userId,但给它自己的列。 - 如果需要,可以创建一个新问题,谢谢..
    猜你喜欢
    • 2021-09-15
    • 2019-06-21
    • 2022-07-23
    • 2017-01-10
    • 2019-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多