Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core 如何配置NLog以获取IP地址.NET核心_Asp.net Core_Nlog - Fatal编程技术网

Asp.net core 如何配置NLog以获取IP地址.NET核心

Asp.net core 如何配置NLog以获取IP地址.NET核心,asp.net-core,nlog,Asp.net Core,Nlog,我开发.net核心应用程序并使用NLog作为日志框架 如何设置NLog布局以获取远程IP地址 不幸的是,${aspnet request.serverVariable=remote\u addr}不受NLog.Web.AspNetCore的支持 可能我可以以某种方式访问httpContext.Connection.RemoteIpAddress。这是从NLog.Web.AspNetCore 4.4.0开始支持的 安装软件包 在你的配置中设置 用法 还包括NLog.Web.AspNetCore

我开发.net核心应用程序并使用NLog作为日志框架

如何设置NLog布局以获取远程IP地址

不幸的是,
${aspnet request.serverVariable=remote\u addr}
不受NLog.Web.AspNetCore的支持


可能我可以以某种方式访问httpContext.Connection.RemoteIpAddress。

这是从NLog.Web.AspNetCore 4.4.0开始支持的

  • 安装软件包
  • 在你的配置中设置

    
    

    用法


    还包括NLog.Web.AspNetCore

    一个更简单的解决方案可能是使用NLog的选项

    例如,在记录事件之前设置名为“IpAddress”的自定义值:

     public IActionResult AnAction()
     {
         NLog.GlobalDiagnosticsContext.Set("IpAddress", HttpContext.Connection.RemoteIpAddress);
         _logger.LogInformation("Something happened");
         return View();
     }
    
    在nlog.config文件中,您可以在布局中使用该值,如下所示:

    <target xsi:type="File" name="allfile" fileName="c:\nlog.log" 
        layout="${longdate} | ${message} | ${gdc:item=IpAddress}" />
    
    public static void Main(string[] args)
    {
      CreateWebHostBuilder(args).UseNLog().Build().Run();
    }
    
    
    
    现在更容易了: 在NLog Web.AspNetCore 4.4.0和NLog.Web 4.5.0中引入

    呈现客户端IP地址

    在ASP.NET和ASP.NET核心中受支持

    配置语法

    ${aspnet请求ip}


    不需要其他任何东西

    还需要在
    .Build()之前调用
    .NLog()

    大概是这样的:

    <target xsi:type="File" name="allfile" fileName="c:\nlog.log" 
        layout="${longdate} | ${message} | ${gdc:item=IpAddress}" />
    
    public static void Main(string[] args)
    {
      CreateWebHostBuilder(args).UseNLog().Build().Run();
    }
    

    非常有帮助!在第一个答案中也有一些重要的tib位需要注意。特别是如果您的
    HttpContextAccessor
    不断出现
    null
    更新,因为这现在是开箱即用的,那么如果您同时有多个用户,全局上下文会发生什么情况?然后,您是否确定正在记录正确的IP地址。也许考虑将IP地址保存到HtpCutExt.Currn.item中,然后使用nlog ${ASPNET项}检索它。