[英]How to display ClientIp in logs using Serilog in .net core?
Project is using .Net Core 3.1 WebAPI.项目正在使用 .Net Core 3.1 WebAPI。
I am trying to log IP address of the client's device to console.我正在尝试将客户端设备的 IP 地址记录到控制台。 I have installed this package Serilog.Enrichers.ClientInfo v1.2.0 and followed their steps.我已经安装了这个包Serilog.Enrichers.ClientInfo v1.2.0 并按照他们的步骤操作。 In addition to console, there is a table ErrorLog with column [ClientIp] where I would like to log the IP address.除了控制台之外,还有一个带有 [ClientIp] 列的 ErrorLog 表,我想在其中记录 IP 地址。 As you can see in the output, both ClientIp and ClientAgent sections are blank.正如您在输出中看到的,ClientIp 和 ClientAgent 部分都是空白的。 Am I missing something?我错过了什么吗? Also please verify if the syntax is correct.另外请验证语法是否正确。
Here is my Serilog config from appsettings.json这是我来自 appsettings.json 的 Serilog 配置
"Serilog": {
"using": [],
"MinimumLevel": {
"Default": "Debug",
"Override": {
"Microsoft": "Warning",
"System": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"Enrich": [ "FromLogContext", "WithMachineName", "WithClientIp", "WithClientAgent" ],
"WriteTo": [
{
"Name": "Logger",
"Args": {
"configureLogger": {
"WriteTo": [
{
"Name": "Console",
"Args": {
"outputTemplate": "[{Level:u3} {Timestamp:o}] {ClientIp} {ClientAgent} ({SourceContext}) {Message} {NewLine}"
}
}
]
}
}
},
{
"Name": "Logger",
"Args": {
"configureLogger": {
"Filter": [
{
"Name": "ByIncludingOnly",
"Args": {
"expression": "@l in ['Error', 'Fatal']"
}
}
],
"WriteTo": [
{
"Name": "MSSqlServer",
"Args": {
"connectionString": "TestDbContext",
"tableName": "ErrorLogs",
"batchPostingLimit": 50,
"autoCreateSqlTable": true,
"columnOptionsSection": {
"removeStandardColumns": [ "MessageTemplate" ],
"customColumns": [
{
"ColumnName": "ClientIp",
"DataType": "VARCHAR",
"AllowNull": true,
"DataLength": 50
//"NonClusteredIndex": true
}
]
}
}
}
]
}
}
}
]
} }
Output:输出:
[INF 2022-07-11T20:13:49.0041535+05:30] () APP:API service has
started
[INF 2022-07-11T20:13:49.5737570+05:30]
(Microsoft.Hosting.Lifetime) Now listening on:
"https://localhost:7017"
[INF 2022-07-11T20:13:49.5987755+05:30]
(Microsoft.Hosting.Lifetime) Now listening on:
"http://localhost:5017"
[INF 2022-07-11T20:13:49.6185554+05:30]
(Microsoft.Hosting.Lifetime) Application started. Press Ctrl+C to
shut down.
[INF 2022-07-11T20:13:49.6255005+05:30]
(Microsoft.Hosting.Lifetime) Hosting environment: "Development"
[INF 2022-07-11T20:13:49.6305270+05:30]
(Microsoft.Hosting.Lifetime) Content root path: "****"
[ERR 2022-07-11T20:14:29.2967601+05:30] () Testing exception
[ERR 2022-07-11T20:14:29.3735005+05:30]
(Serilog.AspNetCore.RequestLoggingMiddleware) HTTP "GET"
"/api/Hospitals" responded 500 in 970.4728 ms
Try this package serilog-aspnetcore :试试这个包serilog-aspnetcore :
app.UseSerilogRequestLogging(options =>
{
// Customize the message template
options.MessageTemplate = "{RemoteIpAddress} {RequestScheme} {RequestHost} {RequestMethod} {RequestPath} responded {StatusCode} in {Elapsed:0.0000} ms";
// Emit debug-level events instead of the defaults
options.GetLevel = (httpContext, elapsed, ex) => LogEventLevel.Debug;
// Attach additional properties to the request completion event
options.EnrichDiagnosticContext = (diagnosticContext, httpContext) =>
{
diagnosticContext.Set("RequestHost", httpContext.Request.Host.Value);
diagnosticContext.Set("RequestScheme", httpContext.Request.Scheme);
diagnosticContext.Set("RemoteIpAddress", httpContext.Connection.RemoteIpAddress);
};
});
Check on this link, it might help.检查此链接,它可能会有所帮助。
看起来您在 using 语句(appsettings.json ln 2)中缺少"Serilog.Enrichers.ClientInfo"
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.