NLog记录带有请求信息的异常

时间:2014-10-31 12:41:17

标签: asp.net asp.net-web-api nlog

如果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! - 消息?

1 个答案:

答案 0 :(得分:1)

所以,事实证明这里出现了多种问题......

  1. ${asp-request.. }适用于asp。 ${aspnet-request...}适用于asp.net
  2. 从文档中复制粘贴时,您应该用实际的

    替换数据类型
    ${asp-request:serverVariable=SOME_ACTUAL_VARIABLE}
    
  3. 当获得nuget扩展时,它有助于获得正确的... 即使NLog.Extensions包含有用的布局,我试图使用的那个也在NLog.Extended包中......

    <package id="NLog.Extended" version="3.1.0.0" targetFramework="net45" />
    
  4. 它还不足以获得nuget包。你还必须告诉nlog它......

    <nlog>
       <extensions>
         <add assembly="NLog.Extended" />
       </extensions>
       <targets.../>
       <rules.../>
    </nlog>
    
  5. 这样......

    我实际上最终使用了${aspnet-request-summary} - 包中的NLog.Extensions。它有点冗长,但现在还可以。