【问题标题】:Why are my exceptions not being logged with ServiceStack NLog?为什么我的异常没有被 ServiceStack NLog 记录?
【发布时间】:2014-11-11 18:15:47
【问题描述】:

鉴于此 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);
});

还有这个例外

这是“文件”记录器的输出

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

知道如何让重载版本的 Error 正常工作吗?

谢谢你, 斯蒂芬

【问题讨论】:

    标签: servicestack nlog


    【解决方案1】:

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

    看看exception layout renderer

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

    【讨论】:

      【解决方案2】:

      你有没有告诉 ServiceStack 在任何地方使用 NLog?例如在初始化您的 AppHost 之前:

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

      【讨论】:

      • 更新了我的问题,但是是的,记录器是在初始化之前配置的。它正在记录,但重载版本不会将异常详细信息记录到目标
      • @Stephen 好的,如果它正在记录,那么它一定是 NLog 特定的配置问题。 ServiceStack 的 NLog 只是底层NLog Logger 的代理。
      猜你喜欢
      • 2010-11-16
      • 2012-01-22
      • 1970-01-01
      • 1970-01-01
      • 2020-11-16
      • 2010-11-25
      • 2012-02-24
      相关资源
      最近更新 更多