无法使用代码获取 Serilog > SourceContext 属性值。未针对日志表中的 Properties 字段生成 SourceContext 属性。尝试通过全局使用通用方法而不是在每个方法中获取 SourceContext 值来获取每个方法(即 api、服务、存储库)的 SourceContext 值。
使用以下代码行
appsetting.json
{
"Serilog": {
"MinimumLevel": {
"Default": "Information",
"Override": {
"Microsoft": "Warning",
"System": "Warning"
}
},
"Enrich": [ "WithOpenTracingContext", "FromLogContext", "WithMachineName", "WithProcessId", "WithThreadId", "WithCorrelationId" ],
"WriteTo": [
{
"Name": "MSSqlServer",
"Args": {
"connectionString": "connection string",
"autoCreateSqlTable ": true,
"schemaName": "dbo",
"tableName": "LogTable",
"restrictedToMinimumLevel": "Information",
"batchPostingLimit": 50,
"period": "0.00:00:30",
"columnOptionsSection": {
"removeStandardColumns": [ "LogEvent", "MessageTemplate" ],
"customColumns": [
{
"ColumnName": "ClientIp",
"DataType": "VARCHAR",
"AllowNull": true,
"DataLength": 50,
"NonClusteredIndex": true
},
{
"ColumnName": "UserId",
"DataType": "INT",
"AllowNull": true
},
{
"ColumnName": "SessionId",
"DataType": "VARCHAR",
"AllowNull": true,
"DataLength": 50,
"NonClusteredIndex": true
}
]
}
}
}
],
"Using": [ "Serilog.Settings.Configuration" ]
}
配置.cs
public static IConfigurationRoot ConfigureSqlLogger(this IConfigurationRoot _configuration)
{
LoggerConfiguration config =
new LoggerConfiguration()
.Enrich.WithClientIp()
.Enrich.WithClientAgent()
.ReadFrom.Configuration(_configuration);
Log.Logger = config.CreateLogger();
return _configuration;
}
启动.cs
public Startup(IWebHostEnvironment environment)
{
try
{
var builder = new ConfigurationBuilder()
.SetBasePath(environment.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{environment.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables();
Configuration = builder.Build();
Configuration.ConfigureSqlLogger();
}
catch (Exception ex)
{
throw ex;
}
}

