使用此 serilog 配置,它可以正常记录到数据库,但决定将 clientip 保存为新列,
安装了 Serilog.Enrichers.ClientInfo 包。
它将客户端 ip 作为内部文本保存到属性列,但我希望将其保存到表中的 clientip 列。
应用程序设置json:
{
"AllowedHosts": "*",
"Serilog": {
"MinimumLevel": "Information",
"Using": [ "Serilog.Enrichers.ClientInfo" ],
"Enrich": [ "WithClientIp", "WithClientAgent" ],
"WriteTo": [
{
"Name": "MSSqlServer",
"Args": {
"connectionString": "Server= ...",
"tableName": "Log"
}
}
]
}
}
API:
[HttpGet]
public IActionResult Get()
{
Log.Information("This is your Ip: {ClientIp}");
程序.cs:
public static IConfiguration Configuration { get; } = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", optional: true)
.AddEnvironmentVariables()
.Build();
public static void Main(string[] args)
{
Log.Logger = new LoggerConfiguration()
.ReadFrom.Configuration(Configuration)
.CreateLogger();
try
{
Log.Information("Getting the motors running...");
CreateHostBuilder(args).Build().Run();
}
catch (Exception ex)
{
Log.Fatal(ex, "Host terminated unexpectedly");
}
finally
{
Log.CloseAndFlush();
}
}
如果您想要额外的列,您需要配置它们。
{
"AllowedHosts": "*",
"Serilog": {
"MinimumLevel": "Information",
"Using": [ "Serilog.Enrichers.ClientInfo" ],
"Enrich": [ "WithClientIp", "WithClientAgent" ],
"WriteTo": [
{
"Name": "MSSqlServer",
"Args": {
"connectionString": "Server= ...",
"tableName": "Log",
"columnOptionsSection": {
"additionalColumns" [
{
"ColumnName": "ClientIp",
"PropertyName": "ClientIp",
"DataType": "varchar",
"DataLength": 45
}
]
}
}
}
]
}
}