如果NLog的asp *布局呈现如何工作?
我有以下设置
packages.config
<package id="NLog" version="3.1.0.0" targetFramework="net45" />
<package id="NLog.Extensions" version="1.0.1.0" targetFramework="net45" />
NLog.config
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<targets>
<target name="errorlog" xsi:type="File" layout="${longdate} [${level}, ${logger}] ${message} ${newline} ${exception:format=tostring} ${newline} ${asp-request:serverVariable=String:queryString=String:item=String:form=String}" fileName="c://temp/${shortdate}-errors.log" />
</targets>
<rules>
<logger name="*" minlevel="Error" writeTo="errorlog"/>
</rules>
</nlog>
记录 - 使用自定义消息
public class FileExceptionLogger : ExceptionLogger
{
public override void Log(ExceptionLoggerContext context)
{
LogManager.GetLogger<ExceptionLogger>().Error("Woops!", context.ExceptionContext.Exception);
}
}
记录错误时,我按预期获得异常信息,但${asp-request...}
部分呈现为空。
如果我给记录器提供消息的请求对象,它会按预期呈现请求信息:
记录 - 请求留言
public class FileExceptionLogger : ExceptionLogger
{
public override void Log(ExceptionLoggerContext context)
{
LogManager.GetLogger<ExceptionLogger>().Error(context.ExceptionContext.Request, context.ExceptionContext.Exception);
}
}
Ain NLog是否应该通过自己接收请求信息?
如果没有,我该如何记录mye Woops!
- 消息?
答案 0 :(得分:1)
所以,事实证明这里出现了多种问题......
${asp-request.. }
适用于asp。 ${aspnet-request...}
适用于asp.net 从文档中复制粘贴时,您应该用实际的
替换数据类型${asp-request:serverVariable=SOME_ACTUAL_VARIABLE}
当获得nuget扩展时,它有助于获得正确的...
即使NLog.Extensions
包含有用的布局,我试图使用的那个也在NLog.Extended
包中......
<package id="NLog.Extended" version="3.1.0.0" targetFramework="net45" />
它还不足以获得nuget包。你还必须告诉nlog它......
<nlog>
<extensions>
<add assembly="NLog.Extended" />
</extensions>
<targets.../>
<rules.../>
</nlog>
这样......
我实际上最终使用了${aspnet-request-summary}
- 包中的NLog.Extensions
。它有点冗长,但现在还可以。