如何配置NLog来获取IP地址.NET Core [英] How to configure NLog to get IP address .NET Core

查看:599
本文介绍了如何配置NLog来获取IP地址.NET Core的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I develop .net core app and use NLog as logging framework.

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

How can I setup NLog layout to get remote IP address?

不幸的是, NLog.Web.AspNetCore 不支持${aspnet-request.serverVariable=remote_addr}.

也许我可以通过某种方式访问​​httpContext.Connection.RemoteIpAddress.

May be I can get access to httpContext.Connection.RemoteIpAddress somehow.

推荐答案

从NLog.Web.AspNetCore 4.4.0开始支持.

This is supported since NLog.Web.AspNetCore 4.4.0.

  1. 安装软件包 NLog.Web.AspNetCore
  2. 在您的配置中设置

  1. Install the package NLog.Web.AspNetCore
  2. Set in your config

<!-- enable asp.net core layout renderers -->
<extensions>
  <add assembly="NLog.Web.AspNetCore"/>
</extensions>

  • 您现在可以在配置中使用${aspnet-request-ip}.

    PS:NLog.Web 4.5.0中的ASP.NET也受支持

    PS: also supported for ASP.NET in NLog.Web 4.5.0

    当前不支持此功能,但是您可以将其注入NLog中,如下所示:

    Currently this is not supported, but you could inject it in NLog like this:

    using System;
    using System.Text;
    using Microsoft.AspNetCore.Http;
    using NLog.Config;
    using NLog.LayoutRenderers;
    using NLog.Web.Internal;
    
    namespace NLog.Web.LayoutRenderers
    {
        /// <summary>
        /// Render the request IP for ASP.NET Core
        /// </summary>
        /// <example>
        /// <code lang="NLog Layout Renderer">
        /// ${aspnet-request-ip}
        /// </code>
        /// </example>
        [LayoutRenderer("aspnet-request-ip")]
        public class AspNetRequestIpLayoutRenderer : AspNetLayoutRendererBase
        {
    
            protected override void DoAppend(StringBuilder builder, LogEventInfo logEvent)
            {
                var httpContext = HttpContextAccessor.HttpContext;
                if (httpContext == null)
                {
                    return;
                }
                builder.Append(httpContext.Connection.RemoteIpAddress);
            }
        }
    }
    

    注册(startup.cs)

    Register it (startup.cs)

    ConfigurationItemFactory.Default.LayoutRenderers
        .RegisterDefinition("aspnet-request-ip", typeof(AspNetRequestIpLayoutRenderer));
    

    另请参见扩展NLog

    用法

    ${aspnet-request-ip}
    

    还包括NLog.Web.AspNetCore!

    Also include NLog.Web.AspNetCore!

    这篇关于如何配置NLog来获取IP地址.NET Core的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

  • 查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆