首页 > 解决方案 > 如何在使用 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>();
                });

那么,我是否还需要对这种方法进行一些更改?

标签: asp.net-corelog4netasp.net-core-3.1

解决方案


好的,最后,我找到了解决方案。所以,我正在回答我自己的问题。

我创建了一个像这样的中间件片段:

    app.Use(async (httpContext, next) =>
    {
        log4net.ThreadContext.Properties["ipAddress"] =
                                          httpContext?.Connection?.RemoteIpAddress;

         await next();
    });

然后,我将中间件片段放置在 Startup.cs 文件的 Configure 方法中,如下所示。

在此处输入图像描述

然后,在我的 log4net 配置文件中,我 在转换模式值中添加了%property{ipAddress} 。

在此处输入图像描述

然后,我看到日志文件中记录的 IP 地址。我希望,此解决方案将帮助需要它的人。


推荐阅读