C# 如何配置nlog.config以包含asp.net core 2 web api请求自定义标头信息?
我有一个简单的asp.net核心web api应用程序(使用Visual Studio 2017中的默认web api模板),使用nlog以JSON格式将消息记录到控制台C# 如何配置nlog.config以包含asp.net core 2 web api请求自定义标头信息?,c#,asp.net-core,nlog,C#,Asp.net Core,Nlog,我有一个简单的asp.net核心web api应用程序(使用Visual Studio 2017中的默认web api模板),使用nlog以JSON格式将消息记录到控制台 ASP.NET核心2:2.0.5 NLog版本:4.5.0-rc07 NLog.Web.AspNetCore: 4.5.0-rc03 以下是NLog配置文件: ** ** 在Startup.cs中,Configure方法包含以下两行: env.ConfigureNLog("nlog.config");
- ASP.NET核心2:2.0.5
- NLog版本:4.5.0-rc07
- NLog.Web.AspNetCore: 4.5.0-rc03
**
**
在Startup.cs中,Configure方法包含以下两行:
env.ConfigureNLog("nlog.config");
loggerFactory.AddNLog();
我将JSON格式的日志消息输出到控制台。但是,我无法接收tid,它是HTTP请求标头中的自定义标头
如何提取HTTP请求头并将其输出到控制台
我感谢你的评论/回答/指导。谢谢。您可以像这样使用
actionfilteratAttribute
:
public class HttpHeadersLogger : ActionFilterAttribute
{
private readonly Logger _log = LogManager.GetCurrentClassLogger();
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var request = filterContext.HttpContext.Request;
var builder = new StringBuilder();
builder.Append(request.RequestType + " " + request.Url + "\n");
var logEventInfo = new LogEventInfo(LogLevel.Info, null, null);
var parsed = HttpUtility.ParseQueryString(request.Headers.ToString());
foreach (string key in parsed)
{
// Search for 'tid' header here to only log these one
logEventInfo.Properties.Add(key, parsed[key]);
}
_log.Log(logEventInfo);
base.OnActionExecuting(filterContext);
}
}
在这个例子中,所有的标题都被记录下来,如果你只想要“tid”一个,你应该过滤它。
这将使用NLog布局表达式,通过使用对象
LogEventInfo
执行日志操作。${aspnet request}
取决于HttpContextAccessor
。请更新您的代码,以便在IWebHostBuilder上使用UseNLog
(参见本例中的program.cs)
UseNLog
将自动注册HttpContextAccessor
(请记住删除ConfigureNLog
或AddNLog
的任何用法,但仅使用UseNLog
和LogManager.LoadConfiguration
,如上例所示)我按照URL链接设置NLog。非常感谢。但是,我的主要挑战是如何配置nlog.config条目以显示自定义头,而不显式地提取请求处理管道中的信息,并在可能的情况下设置日志上下文。如果可能,nlog.config中的以下行是否正确@PaulSUseNLog
将提供对HttpContextAccessor
的访问权限,该访问权限将提供对HttpRequest.Headers的访问权限,可以使用${aspnet request:header=tid}
记录这些头。但我不是你解决问题的专家。听起来好像你把一些不符合维基推荐的东西随机组合在一起了。可能您需要检查NLog内部记录器是否存在任何警告。感谢您在检查NLog内部记录器方面提供的帮助和建议。我在nlog.config中遗漏了以下内容。问题在于NLog.config中缺少NLog.Web.AspNetCore扩展。