Net CoreNLog.Web"aspnet-request:header"属性用法?
Net Core NLog.Web "aspnet-request:header" property usage?
有什么方法可以使用 "aspnet-request:header" 属性 和一个参数来记录所有 headers 吗?或者我应该像 "aspnet-request:header=MyHeader" 一样一个一个地获取 headers 并在插入之前将它们组合成一个参数?我有很多 headers,不想单独添加它们,如果可能的话,我需要一种快速记录它们的方法。
目前一次只支持一个header,因为它调用
string header = httpRequest.Headers[this.Header];
see source
编辑:您可以像这样将其插入 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 all headers for ASP.NET Core
/// </summary>
/// <example>
/// <code lang="NLog Layout Renderer">
/// ${aspnet-request-all-headers}
/// </code>
/// </example>
[LayoutRenderer("aspnet-request-all-headers")]
public class AspNetRequestAllHeadersLayoutRenderer : AspNetLayoutRendererBase
{
protected override void DoAppend(StringBuilder builder, LogEventInfo logEvent)
{
var httpRequest = HttpContextAccessor.HttpContext.TryGetRequest();
if (httpRequest == null || httpRequest.Headers == null)
{
return;
}
foreach(var kpv in httpRequest.Headers)
{
if (header != null)
{
builder.Append(kpv.Key);
builder.Append(=);
builder.Append(kpv.Value);
}
}
}
}
}
注册 (startup.cs)
ConfigurationItemFactory.Default.LayoutRenderers
.RegisterDefinition("aspnet-request-all-headers", typeof(AspNetRequestAllHeadersLayoutRenderer ));
用法
${aspnet-request-all-headers}
有什么方法可以使用 "aspnet-request:header" 属性 和一个参数来记录所有 headers 吗?或者我应该像 "aspnet-request:header=MyHeader" 一样一个一个地获取 headers 并在插入之前将它们组合成一个参数?我有很多 headers,不想单独添加它们,如果可能的话,我需要一种快速记录它们的方法。
目前一次只支持一个header,因为它调用
string header = httpRequest.Headers[this.Header];
see source
编辑:您可以像这样将其插入 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 all headers for ASP.NET Core
/// </summary>
/// <example>
/// <code lang="NLog Layout Renderer">
/// ${aspnet-request-all-headers}
/// </code>
/// </example>
[LayoutRenderer("aspnet-request-all-headers")]
public class AspNetRequestAllHeadersLayoutRenderer : AspNetLayoutRendererBase
{
protected override void DoAppend(StringBuilder builder, LogEventInfo logEvent)
{
var httpRequest = HttpContextAccessor.HttpContext.TryGetRequest();
if (httpRequest == null || httpRequest.Headers == null)
{
return;
}
foreach(var kpv in httpRequest.Headers)
{
if (header != null)
{
builder.Append(kpv.Key);
builder.Append(=);
builder.Append(kpv.Value);
}
}
}
}
}
注册 (startup.cs)
ConfigurationItemFactory.Default.LayoutRenderers
.RegisterDefinition("aspnet-request-all-headers", typeof(AspNetRequestAllHeadersLayoutRenderer ));
用法
${aspnet-request-all-headers}