一、添加固定指定
1、定义组件代码
[LayoutRenderer("hello-world")]
public class HelloWorldLayoutRenderer : LayoutRenderer
{
protected override void Append(StringBuilder builder, LogEventInfo logEvent)
{
builder.Append("hello world!");
}
}
2、nlog配置文件引入程序集名称
<nlog>
<extensions>
<add assembly="MyAssembly"/>
</extensions>
3、nlog配置文件中添加配置
将${hello-world}写入配置文件即可
二、如果想将http请求中参数写入该怎么办呢?
1、定义组件代码,这里是参考源码写的。这里是记录每个请求的token,httpContext都能拿到,其他就可以为所欲为了
[LayoutRenderer("aspnet-token")]
public class AspNetRequestMachineNoLayoutRenderer : AspNetLayoutRendererBase
{
[DefaultValue("token")]
public Layout ForwardedForHeader { get; set; } = "token";
protected override void DoAppend(StringBuilder builder, LogEventInfo logEvent)
{
var httpContext = HttpContextAccessor.HttpContext;
var request = httpContext?.Request;
if (request == null)
{
return;
}
var machineNo = ForwardedForHeader != null ? TryLookupForwardHeader(request, logEvent) : string.Empty;
builder.Append(token);
}
private string TryLookupForwardHeader(Microsoft.AspNetCore.Http.HttpRequest httpRequest, LogEventInfo logEvent)
{
var headerName = ForwardedForHeader.Render(logEvent);
if (httpRequest.Headers?.ContainsKey(headerName) == true)
{
var forwardedHeaders = httpRequest.Headers.GetCommaSeparatedValues(headerName);
if (forwardedHeaders.Length > 0)
{
return forwardedHeaders[0];
}
}
return string.Empty;
}
}