asp.net-core - 如何在使用 log4net 的 ASP.NET Core 日志记录中包含客户端的 IP 地址?
问题描述
是否有任何消息模板或其他技术可用于捕获客户端的 IP 地址并使用 log4net 在每个日志中打印?
此刻,我对 log4net 有以下转换模式
<conversionPattern value="%date [%thread] %level %logger - %message%newline%exception" />
所以,我不确定,如果我只是添加一个占位符来获取 IP 地址,log4bet 会神奇地知道客户端的 IP 地址并打印出来吗?
或者我是否还需要配置我的 ASP.Net Core 3.1 网站?
这是我当前的“CreateHostBuilder 方法。
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureLogging(logging =>
{
logging.ClearProviders();
logging.AddLog4Net();
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
那么,我是否还需要对这种方法进行一些更改?
解决方案
好的,最后,我找到了解决方案。所以,我正在回答我自己的问题。
我创建了一个像这样的中间件片段:
app.Use(async (httpContext, next) =>
{
log4net.ThreadContext.Properties["ipAddress"] =
httpContext?.Connection?.RemoteIpAddress;
await next();
});
然后,我将中间件片段放置在 Startup.cs 文件的 Configure 方法中,如下所示。
然后,在我的 log4net 配置文件中,我 在转换模式值中添加了%property{ipAddress} 。
然后,我看到日志文件中记录的 IP 地址。我希望,此解决方案将帮助需要它的人。
推荐阅读
- html - 如何使用文本和图标创建导航栏?
- amazon-web-services - 放置 IAM 角色策略 dev-env-policy 时出错:MalformedPolicyDocument:策略中的语法错误
- angular - 我可以使用 Angular 仅使用 client_secret 从 AZURE 获取我的服务令牌吗?
- c++ - 为什么要定义这个运算符?.* 和 ->*
- javascript - Axios 在第一次加载时没有得到响应
- json - 计算输出中 json 对象的数量
- php - VSCode 打开多个文件
- sql - 从同一表中选择记录后重新插入表中
- c# - 我如何反序列化该响应?
- python - 更改 netCDF4 文件中的纬度值