0

いくつかの Azure Web ジョブが設定されているアプリケーションがあり、これらの Web ジョブの開始と終了を報告するように NLog が設定されています。NLog を Stackify にフックして、Stackify ロガーを使用して WebJob から WebJob への移動を監視できるようにします。ロギングは機能します (したがって、構成に問題がないことがわかります)。私たちが直面している問題は、ログが断続的であることです。いくつかの WebJob に沿って移動するメッセージを個別に確認できますが、部分的なログしか取得できません。たとえば、最初のログにはメッセージが読み取られたことが記録されますが、終了メッセージは表示されません。次のログには、入口と出口が表示されます。問題は、それらがすべてまったく同じコードを利用しているため、同じログメッセージが毎回表示されるはずです。他の誰かが以前にこの問題に遭遇したことがありますか? 回答する前に、次の診断手順を実行しました。

(1) すべての webjob 構成ファイルで構成設定が適切であることを確認しました。

(2) すべての webjob 構成ファイルが Azure に適切に投稿されていることを確認しました。

(3) 私たちは、メッセージがさまざまな Web ジョブに到達し、処理され、次の Web ジョブに移動していることを (Azure の Web ジョブ コンソールを介して) 独自に検証しました。つまり、ログ コードを呼び出していることを意味します。

(4) Stackify のログ データが調整されていないことを確認しました (ログが単に停止した場合、これは理にかなっているかもしれませんが、単一のメッセージ送信中に、場合によっては部分的なログが取得され、他の場合には完全なログが取得されるという事実があります)。これはありそうもありません)。

(5) Stackify のドキュメントを詳しく調べたところ、ログを取得できるように構成が適切に設定されていることが保証されているようです。全か無かのシナリオはカバーしていますが、いくつかのシナリオはカバーしていません。

必要に応じて、より明確な説明を提供させていただきます。

4

3 に答える 3

2

何が起こっているのかを発見しましたが、かなり奇妙です。問題は、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 を探しているが見つからないことを示しています (これは、使用していないためそうではありません)。さて、これを奇妙にしているの、このバージョンで一度に機能したため、何らかの形で NLog 5.0 への参照がシステムのどこかにスタックしていますが、ソリューション内のすべてが NLog 4.4 を実行しているため、それを見つけることができません。csproj、パッケージ構成、アプリ構成、実際にインストールされた nuget パッケージを確認しました - バージョン 5.0 への参照はありません。

この問題に対する答えは、1.25.3 にダウングレードすることでした。私がそれをするとすぐに、それはうまくいきました。その後、1.25.4 に戻そうとしましたが、同じ問題が再び発生しました。Matt - Shutdown についてのあなたのポイントに - それを webjobs に追加し、完全なログが表示されるかどうかを監視します。皆さんの提案に感謝します!

于 2017-01-09T16:43:05.537 に答える
0

NLog-config の例がいいかもしれません。async-wrapper を使用している場合、デフォルトのオーバーフロー アクションは「ランダムな」メッセージを破棄することです。

于 2017-01-08T20:15:32.817 に答える