Stackify NLog 间歇性记录
Stackify NLog intermittent logging
我们有一个应用程序,其中设置了多个 Azure WebJobs,并且我们设置了 NLog 来报告这些 webjobs 的进入和退出。我们将 NLog 连接到 Stackify,这样我们就可以使用 Stackify 记录器来观察从 WebJob 到 WebJob 的事情。日志记录有效(所以我们知道配置没问题)。我们遇到的问题是日志记录是间歇性的——我们对沿着几个 WebJobs 传输的消息进行了独立确认,但我们只会得到部分日志记录。例如,第一个日志将记录从中读取了一条消息,但不会显示退出消息。下一个日志将显示入口和出口。问题是它们都利用完全相同的代码,因此 same 日志消息应该每次都出现。有没有其他人遇到过这个问题?在您回答之前,我们已采取以下诊断步骤:
(1) 我们已验证所有 webjob 配置文件中的配置设置是否正确。
(2) 我们已验证所有 webjob 配置文件已正确发布在 Azure 中。
(3) 我们已经独立验证(通过 Azure 中的 webjob 控制台)消息正在到达不同的 webjobs,处理,然后移动到下一个 webjob,这意味着它们将调用日志代码。
(4) 我们已经验证我们的 Stackify 日志数据没有受到限制(如果日志只是简单地停止,这可能是有意义的 - 但事实是,在单个消息传输期间,我们在某些情况下只会获得部分日志记录,而在其他情况下会获得完整日志记录这不太可能)。
(5) 我们仔细阅读了 Stackify 文档,它似乎确保配置设置正确,以便您完全可以进行日志记录。它涵盖了全有或全无的情况,但不包括 一些 的情况。
我很乐意根据需要提供更多说明。
您应该可以通过在应用程序末尾添加一行代码到 StackifyLib 来刷新来解决此问题。
StackifyLib.Logger.Shutdown();
https://github.com/stackify/stackify-api-dotnet/blob/master/README.md
我希望这能为您解决问题,如果没有,请联系 Stackify 支持。
NLog-config 的示例可能会很好。如果使用异步包装器,则默认情况下溢出操作是丢弃 "random" 条消息。
我们发现了正在发生的事情,而且它相当 st运行ge。问题最终出在我们对 NLog.Targets.Stackify 的使用上。我们使用的是 1.25.4 版。当我 运行 使用 Julian 建议的 NLog 调试器进行测试时,结果如下:
2017-01-09 10:14:43.5079 Info Loading assembly name: NLog.Targets.Stackify
2017-01-09 10:14:43.5449 Debug ScanAssembly('NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c')
2017-01-09 10:14:43.5929 Debug Start auto loading, location: C:\Dev\AffinityMain\platform\Integrity.WebJob.Rating\bin\Debug
2017-01-09 10:14:43.5929 Info Auto loading assembly file: C:\Dev\AffinityMain\platform\Integrity.WebJob.Rating\bin\Debug\NLog.Targets.Stackify.dll
2017-01-09 10:14:43.6039 Info NLog.Targets.Stackify, Version=1.18.6200.39247, Culture=neutral, PublicKeyToken=null. File version: 1.18.*. Product version: 1.25.4.
2017-01-09 10:14:43.6039 Debug ScanAssembly('NLog.Targets.Stackify, Version=1.18.6200.39247, Culture=neutral, PublicKeyToken=null')
2017-01-09 10:14:43.6249 Warn Type load exception. Exception: System.IO.FileLoadException: Could not load file or assembly 'NLog, Version=5.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
File name: 'NLog, Version=5.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c'
在解析配置时不久之后出现此错误:
System.ArgumentException: Target cannot be found: 'StackifyTarget'
文档表明 NLog 4.4 版足以 运行 这个库。然而,NLog 调试器表明它正在寻找 5.0 版,但没有找到(它不会因为我们没有使用它)。现在,这个 st运行ge 的原因是它 did 在这个版本中一次工作,所以不知何故,对 NLog 5.0 的引用被卡在系统的某个地方,但是我们找不到它,因为我们解决方案中的所有内容都是 运行ning NLog 4.4。我们已经检查了 csproj、包配置、应用程序配置、实际安装的 nuget 包 - 没有提到版本 5.0。
问题的答案是降级到 1.25.3。我一这样做,它就奏效了。然后我尝试将其恢复到 1.25.4,但又遇到了同样的问题。 Matt - 关于关机的观点 - 我们将把它添加到我们的网络作业中,然后我将监控我们是否看到完整的日志。谢谢大家的建议!
我们有一个应用程序,其中设置了多个 Azure WebJobs,并且我们设置了 NLog 来报告这些 webjobs 的进入和退出。我们将 NLog 连接到 Stackify,这样我们就可以使用 Stackify 记录器来观察从 WebJob 到 WebJob 的事情。日志记录有效(所以我们知道配置没问题)。我们遇到的问题是日志记录是间歇性的——我们对沿着几个 WebJobs 传输的消息进行了独立确认,但我们只会得到部分日志记录。例如,第一个日志将记录从中读取了一条消息,但不会显示退出消息。下一个日志将显示入口和出口。问题是它们都利用完全相同的代码,因此 same 日志消息应该每次都出现。有没有其他人遇到过这个问题?在您回答之前,我们已采取以下诊断步骤:
(1) 我们已验证所有 webjob 配置文件中的配置设置是否正确。
(2) 我们已验证所有 webjob 配置文件已正确发布在 Azure 中。
(3) 我们已经独立验证(通过 Azure 中的 webjob 控制台)消息正在到达不同的 webjobs,处理,然后移动到下一个 webjob,这意味着它们将调用日志代码。
(4) 我们已经验证我们的 Stackify 日志数据没有受到限制(如果日志只是简单地停止,这可能是有意义的 - 但事实是,在单个消息传输期间,我们在某些情况下只会获得部分日志记录,而在其他情况下会获得完整日志记录这不太可能)。
(5) 我们仔细阅读了 Stackify 文档,它似乎确保配置设置正确,以便您完全可以进行日志记录。它涵盖了全有或全无的情况,但不包括 一些 的情况。
我很乐意根据需要提供更多说明。
您应该可以通过在应用程序末尾添加一行代码到 StackifyLib 来刷新来解决此问题。
StackifyLib.Logger.Shutdown();
https://github.com/stackify/stackify-api-dotnet/blob/master/README.md
我希望这能为您解决问题,如果没有,请联系 Stackify 支持。
NLog-config 的示例可能会很好。如果使用异步包装器,则默认情况下溢出操作是丢弃 "random" 条消息。
我们发现了正在发生的事情,而且它相当 st运行ge。问题最终出在我们对 NLog.Targets.Stackify 的使用上。我们使用的是 1.25.4 版。当我 运行 使用 Julian 建议的 NLog 调试器进行测试时,结果如下:
2017-01-09 10:14:43.5079 Info Loading assembly name: NLog.Targets.Stackify
2017-01-09 10:14:43.5449 Debug ScanAssembly('NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c')
2017-01-09 10:14:43.5929 Debug Start auto loading, location: C:\Dev\AffinityMain\platform\Integrity.WebJob.Rating\bin\Debug
2017-01-09 10:14:43.5929 Info Auto loading assembly file: C:\Dev\AffinityMain\platform\Integrity.WebJob.Rating\bin\Debug\NLog.Targets.Stackify.dll
2017-01-09 10:14:43.6039 Info NLog.Targets.Stackify, Version=1.18.6200.39247, Culture=neutral, PublicKeyToken=null. File version: 1.18.*. Product version: 1.25.4.
2017-01-09 10:14:43.6039 Debug ScanAssembly('NLog.Targets.Stackify, Version=1.18.6200.39247, Culture=neutral, PublicKeyToken=null')
2017-01-09 10:14:43.6249 Warn Type load exception. Exception: System.IO.FileLoadException: Could not load file or assembly 'NLog, Version=5.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
File name: 'NLog, Version=5.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c'
在解析配置时不久之后出现此错误:
System.ArgumentException: Target cannot be found: 'StackifyTarget'
文档表明 NLog 4.4 版足以 运行 这个库。然而,NLog 调试器表明它正在寻找 5.0 版,但没有找到(它不会因为我们没有使用它)。现在,这个 st运行ge 的原因是它 did 在这个版本中一次工作,所以不知何故,对 NLog 5.0 的引用被卡在系统的某个地方,但是我们找不到它,因为我们解决方案中的所有内容都是 运行ning NLog 4.4。我们已经检查了 csproj、包配置、应用程序配置、实际安装的 nuget 包 - 没有提到版本 5.0。
问题的答案是降级到 1.25.3。我一这样做,它就奏效了。然后我尝试将其恢复到 1.25.4,但又遇到了同样的问题。 Matt - 关于关机的观点 - 我们将把它添加到我们的网络作业中,然后我将监控我们是否看到完整的日志。谢谢大家的建议!