为什么我的异常没有使用ServiceStack NLog记录?

时间:2014-11-11 18:15:48

标签: servicestack nlog

鉴于此NLog配置文件:

  

<extensions>
  <add assembly="Seq.Client.NLog"/>
</extensions>

<variable name="ServiceName" value="LO.Leads.Processor"/>

<targets async="true">

  <target name="seq" xsi:type="Seq" serverUrl="http://mywebsite">
    <property name="ThreadId" value="${threadid}" as="number" />
    <property name="MachineName" value="${machinename}" />
  </target>

  <target name="file" xsi:type="File"
          layout="${longdate}|${logger}|${level}|${threadid}|${message}"
          fileName="C:\LogFiles\Leads\Processor\Processor.log" 
          archiveFileName="C:\LogFiles\Leads\Processor\Processor.{##}.log"
          archiveEvery="Day"
          archiveNumbering="Rolling"
          maxArchiveFiles="45"
          concurrentWrites="true"/>

  <target name="debugger" xsi:type="Debugger" 
          layout="${logger}:${message}"/>

  <target name="console" xsi:type="Console"           
          layout="${logger}:${level}:${threadid}:${message}" />

</targets>

<rules>
  <logger name="*" minlevel="Info" writeTo="seq" />
  <logger name="*" minlevel="Error" writeTo="file" />
  <logger name="*" minlevel="Debug" writeTo="debugger" />
  <logger name="*" minlevel="Debug" writeTo="console" />
</rules>

和此代码块:

public class Program
{
    static Program()
    {
        LogManager.LogFactory = new NLogFactory();
    }

    public static void Main()
    {               
        HostFactory.Run(x =>
        {
            x.Service<ProcessorAppHost>(s =>
            {
                s.ConstructUsing(name => new ProcessorAppHost());
                s.WhenStarted(ah =>
                {
                    ah.Init();
                    ah.Start("http://*:8088/");
                    "Message processor listening at http://localhost:8088 ".Print();
                });
                s.WhenStopped(ah => ah.Dispose());
            });
            x.RunAsLocalSystem();

            x.SetDescription("Processes all messages for the Leads application.");
            x.SetDisplayName("Leads Message Processor");
            x.SetServiceName("LOLeadsProcessor");
        });
    }
}



//MQHandlers
mqServer.RegisterHandler<LeadInformation>(m =>
{
    try
    {
        var db = container.Resolve<IFrontEndRepository>();
        db.SaveMessage(m as Message);    
    }
    catch (Exception exception)
    {
        _log.Error("This is the only text logged", exception);                   
    }

    return ServiceController.ExecuteMessage(m);
});

和此例外

Exception being logged

这里是'file'记录器的输出

2014-11-11 10:06:53.9179 | ProcessorAppHost |错误| 24 |这是唯一记录的文本

有关如何让错误的重载版本正常工作的任何想法吗?

谢谢你, 斯蒂芬

2 个答案:

答案 0 :(得分:1)

您是否告诉ServiceStack在任何地方使用NLog?例如在初始化AppHost之前:

LogManager.LogFactory = new ServiceStack.Logging.NLogger.NLogFactory();
new AppHost().Init();

答案 1 :(得分:1)

${message}包含您的异常消息,即“这是唯一记录的文本”。

查看exception layout renderer

layout="${longdate}|${logger}|${level}|${threadid}|${message}|${exception}"