NLog - 如何记录所有请求信息

Max*_*ave 5 asp.net nlog

例如,Nlog具有一些ASP.NET日志记录功能(请参阅布局呈现器列表)

${aspnet-request}
Run Code Online (Sandbox Code Playgroud)

对于日志表单项,我需要知道项目的名称.

 ${aspnet-request:form=myVariable}
Run Code Online (Sandbox Code Playgroud)

但是如何从物品中记录所有物品,这些物品都是未知的?例如

 ${aspnet-request:form}
Run Code Online (Sandbox Code Playgroud)

Jer*_*all 1

我自己编写了自己的 LayoutRenderer(事实上,最近刚刚做了一些几乎相同的事情)——NLog 最好的部分之一是该框架的可扩展性。根据您的配置方式,配置将决定您如何引用/加载自定义布局渲染器,但就您可以做的事情而言,天空确实是限制。

在我的脑海中,您可以使用自定义渲染器采用两种方法之一:包装/扩展现有的 asp 请求渲染器并仅代理所有调用,或者以与 nlog 相同的方式获取请求对象的钩子(这很棘手;如果内存允许的话,它会调用获取 COM 实例)。

我采取的方法是将 NameValueCollection 嵌入到传出的 LogEventInfo 对象本身中(在属性字典中),然后使用自定义布局渲染器来提取该集合并渲染它。