在特定列内写入 Serilog ASP.NET MVC C#

Sam*_*our 3 c# asp.net asp.net-mvc serilog

我正在使用 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);
Run Code Online (Sandbox Code Playgroud)

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

创建列后如何写入?

Nic*_*rdt 5

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

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

传递给记录器配置方法:

.WriteTo.MSSqlServer(connectionString, "Logs", columnOptions: columnOptions)
Run Code Online (Sandbox Code Playgroud)

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

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));
  }
}
Run Code Online (Sandbox Code Playgroud)

然后配置记录器以使用丰富器:

.Enrich.With<RoleEnricher>()
Run Code Online (Sandbox Code Playgroud)