如何配置NLog来获取IP地址.NET Core [英] How to configure NLog to get IP address .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.
- 安装软件包 NLog.Web.AspNetCore
-
在您的配置中设置
- Install the package NLog.Web.AspNetCore
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屋!