如何使用 log4net 在 ASP.NET 核心日志记录中包含客户端的 IP 地址?
How to include client's IP address in the ASP.NET Core logging with log4net?
是否有任何消息模板或其他技术可用于捕获客户端的 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 配置文件中,我在转换模式值中添加了 %属性{ipAddress}。
然后,我在日志文件中看到记录的 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 配置文件中,我在转换模式值中添加了 %属性{ipAddress}。
然后,我在日志文件中看到记录的 IP 地址。我希望,这个解决方案可以帮助需要它的人。