c# - 在特定列中写入 Serilog ASP.NET MVC C#

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

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

我必须记录各种类型的日志,一种是管理员级别的,一种是用户级别的。

我想创建一个名为“角色”的额外列,其中包含 1 个管理员或 2 个用户,具体取决于 Microsoft 成员身份。

我使用了这段代码:

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);

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

创建列后如何写入?

最佳答案

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>()

关于c# - 在特定列中写入 Serilog ASP.NET MVC C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39956489/

相关文章:

c# - 创建数据库查询方法

c# - 为什么 DefaultAzureCredential 尝试在本地计算机上使用 ManagedIdentityCredential?

c# - 如何使用curl对Web服务进行身份验证?

c# - ASP.NET 哈希 PW + 盐混淆

c# - 如何使用 HtmlAgilityPack 向 <head> 添加 <link> 或 &lt;meta&gt; 标签?

javascript - header无法使用跨域传入ajax

c# - 为 ASP.NET Core 中的选项自定义 JSON 属性名称

c# - 如何将下拉列表项设置为在 ASP.NET 中选中?

c# - Asp.net WebForms DropDownList - 具有不同值和显示文本的控件 (DataValueField/DataTextField)

mysql - 使用 ASP.NET MVC、LINQ 和 Entity Framework 从 SQL Server 2008 切换到 MySQL