gpt4 book ai didi

asp.net-core - 如何配置NLog获取IP地址.NET Core

转载 作者:行者123 更新时间:2023-12-01 18:29:29 24 4
gpt4 key购买 nike

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

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

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

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

最佳答案

从 NLog.Web.AspNetCore 4.4.0 开始支持此功能。

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

    <!-- enable asp.net core layout renderers -->
    <extensions>
    <add assembly="NLog.Web.AspNetCore"/>
    </extensions>
  3. 您现在可以在配置中使用 ${aspnet-request-ip}

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

旧答案

目前不支持此功能,但您可以将其注入(inject)到 NLog 中,如下所示:

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)

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

另请参阅Extending NLog

使用

${aspnet-request-ip}

还包括 NLog.Web.AspNetCore!

关于asp.net-core - 如何配置NLog获取IP地址.NET Core,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40786220/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com