2016-11-24 28 views

Odpowiedz

6

Obecnie nie jest obsługiwany, ale można go wstrzyknąć w NLog tak:

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); 
     } 
    } 
} 

zarejestrować go (startup.cs)

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

Zobacz również Extending NLog

Wykorzystanie

${aspnet-request-ip} 

Dołącz także NLog.Web.AspNetCore!

+1

Bardzo pomocna

Nic innego! W pierwszej odpowiedzi na to pytanie (http://stackoverflow.com/questions/34679727/use-nlog-in-asp-net-core-core-application/34888186) są ważne fragmenty tib-bitów, na które należy przyjrzeć, także. Zwłaszcza, jeśli 'HttpContextAccessor' ciągle pojawia się' null' –

1

Prostszym rozwiązaniem może być użycie opcji NLog Global Diagnostics Context.

Na przykład ustawić wartość niestandardową nazwie „IPaddress” przed zalogowaniem zdarzenie:

public IActionResult AnAction() 
    { 
     NLog.GlobalDiagnosticsContext.Set("IpAddress", HttpContext.Connection.RemoteIpAddress); 
     _logger.LogInformation("Something happened"); 
     return View(); 
    } 

A w pliku plik NLog.config, można skorzystać z tej wartości w układzie tak:

<target xsi:type="File" name="allfile" fileName="c:\nlog.log" 
    layout="${longdate} | ${message} | ${gdc:item=IpAddress}" /> 
+0

Co stanie się z twoim globalnym kontekstem, jeśli masz wielu użytkowników jednocześnie? Czy jesteś wtedy pewien, że logujesz prawidłowy adres IP. Może rozważyć zapisanie adresu IP w HttpContext.Current.Items, a następnie pobrać go za pomocą NLog $ {aspnet-item} –

0

teraz jest łatwiej: wprowadzony w nlog Web.AspNetCore 4.4.0 & NLog.Web 4.5.0

Render Client adres IP

Obsługiwane w ASP.NET & ASP.NET Core.

Konfiguracja Składnia

$ {ASPNET-request-ip} jest potrzebne