【发布时间】:2011-09-02 05:39:46
【问题描述】:
我正在尝试将当前页面的 URL 记录为 NLog 布局的一部分。我搜索了 NLog 布局变量,但一无所获。
有谁知道如何获取当前页面的 URL 作为布局的变量?也可以只提取域名以便在 EventLog 源属性中使用吗?
【问题讨论】:
-
跟进:我使用 ${aspnet-request:serverVariable=SERVER_NAME} 获取域
我正在尝试将当前页面的 URL 记录为 NLog 布局的一部分。我搜索了 NLog 布局变量,但一无所获。
有谁知道如何获取当前页面的 URL 作为布局的变量?也可以只提取域名以便在 EventLog 源属性中使用吗?
【问题讨论】:
使用Aspnet-request layout renderer。
<target xsi:type="Trace"
name="trace"
layout="${message} ${aspnet-request:serverVariable=Url}" />
您可以完全访问request properties。
【讨论】:
我测试了很多方法,但似乎只有“项目”对 http://msdn.microsoft.com/en-us/library/ms524602.aspx 有效
method = ${aspnet-request:item=HTTP_METHOD}
url 带有查询字符串 = ${aspnet-request:item=HTTP_URL}
用户代理/浏览器 = ${aspnet-request:item=HTTP_USER_AGENT}
等等……
更新
除了我上面的答案(我不记得我当时是否知道)但我在某个地方(也不记得在哪里,不久前)发现了 NLog.Extended还必须引用 .dll 以使用与 ASP.NET 日志记录相关的功能,即。带有${aspnet-...的布局
【讨论】:
在发现上述方法不适用于 .NET Core 之前,我尝试了上述 .NET Core 的答案
THE FOLLOWING DO NOT WORK FOR .NET CORE
${aspnet-request:serverVariable=Url}
${aspnet-request:item=HTTP_URL}
改为使用:
${aspnet-request-url}
${aspnet-request-querystring}
例如
<target name="jsonFile" xsi:type="File" fileName="log.json" archiveNumbering="DateAndSequence" archiveAboveSize="5000000" maxArchiveFiles="10">
<layout xsi:type="JsonLayout">
<attribute name="time" layout="${longdate}" />
<attribute name="level" layout="${level:upperCase=true}"/>
<attribute name="message" layout="${message}" />
<attribute name="exception" layout="${exception:format=ToString,StackTrace:maxInnerExceptionLevel=2}" />
<attribute name="machineName" layout="${machinename}" />
<attribute name="ip" layout="${aspnet-request-ip}" />
<attribute name="method" layout="${aspnet-request-method}" />
<attribute name="url" layout="${aspnet-request-url}" />
<attribute name="query" layout="${aspnet-request-querystring}" />
<attribute name="postedBody" layout="${aspnet-request-posted-body}" />
<attribute name="userAgent" layout="${aspnet-request-useragent}" />
</layout>
</target>
更多信息请参见: https://nlog-project.org/config/?tab=layout-renderers&search=package:nlog.web.aspnetcore
【讨论】: