【问题标题】:How to include client's IP address in the ASP.NET Core logging with log4net?如何在使用 log4net 的 ASP.NET Core 日志记录中包含客户端的 IP 地址?
【发布时间】:2020-06-10 21:15:21
【问题描述】:

是否有任何消息模板或其他技术可用于捕获客户端的 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-core log4net asp.net-core-3.1


    【解决方案1】:

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

    我已经创建了一个像这样的中间件 sn-p:

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

    然后,我将中间件 sn-p 放在 Startup.cs 文件的 Configure 方法中,如下所示。

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

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

    【讨论】:

      猜你喜欢
      • 2015-04-24
      • 1970-01-01
      • 1970-01-01
      • 2021-01-23
      • 2020-05-16
      • 1970-01-01
      • 2020-04-29
      • 1970-01-01
      相关资源
      最近更新 更多