如何使用 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 地址。我希望,这个解决方案可以帮助需要它的人。