Stackify NLog прерывистая регистрация

У нас есть приложение, в котором настроено несколько веб-заданий Azure, и мы настроили NLog, чтобы сообщать о входе и выходе из этих веб-заданий. У нас есть NLog, подключенный к Stackify, так что мы можем использовать регистратор Stackify, чтобы наблюдать за тем, как вещи перемещаются из WebJob в WebJob. Ведение журнала работает (поэтому мы знаем, что конфигурация в порядке). Проблема, с которой мы сталкиваемся, состоит в том, что регистрация прерывается - у нас есть независимое подтверждение сообщений, проходящих по нескольким WebJobs, но мы получим только частичную регистрацию. Например, в первом журнале будет записано, что с него было прочитано сообщение, но не будет отображено сообщение о выходе. Следующий журнал покажет вход и выход. Проблема в том, что все они используют один и тот же код, поэтому одно и то же сообщение журнала должно появляться каждый раз. Кто-нибудь еще сталкивался с этой проблемой раньше? Прежде чем ответить, мы предприняли следующие диагностические шаги:

(1) Мы проверили правильные настройки конфигурации во всех файлах конфигурации webjob.

(2) Мы убедились, что все файлы конфигурации webjob правильно размещены в Azure.

(3) Мы независимо проверили (через консоли веб-заданий в Azure), что сообщения попадают в различные веб-задания, обрабатывают, а затем переходят к следующему веб-заданию, что означает, что они будут вызывать код регистрации.

(4) Мы убедились, что данные нашего журнала Stackify не регулируются (это могло бы иметь смысл, если бы журналы просто останавливались - но тот факт, что в некоторых случаях мы получаем только частичную регистрацию и полную регистрацию в других во время передачи одного сообщения) делает это маловероятным).

(5) Мы изучили документацию Stackify, которая, кажется, гарантирует, что конфигурация настроена должным образом, чтобы вы вообще регистрировались. Он охватывает сценарий "все или ничего", но не некоторый сценарий.

Я буду рад предоставить больше разъяснений по мере необходимости.

3 ответа

Решение

Мы обнаружили, что происходит, и это довольно странно. Проблема закончилась тем, что мы использовали NLog.Targets.Stackify. Мы использовали версию 1.25.4. Когда я запустил тест с использованием отладчика 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'

Документация указывает, что версия 4.4 NLog достаточна для запуска этой библиотеки. Однако отладчик NLog указывает, что он ищет версию 5.0, а не находит ее (чего не будет, потому что мы ее не используем). Теперь, что делает это странным, это то, что он работал когда-то, с этой версией, поэтому каким-то образом ссылка на NLog 5.0 застряла где-то в системе, но мы не можем найти ее, потому что все в нашем решении работает под управлением NLog 4.4. Мы проверили csproj, конфигурацию пакетов, конфигурацию приложения, фактические установленные пакеты nuget - без ссылки на версию 5.0.

Ответом на проблему было снижение до 1.25.3. Как только я это сделал, это сработало. Затем я попытался вернуться к 1.25.4, и снова возникла та же проблема. Мэтт - к твоей точке зрения по поводу выключения - мы собираемся добавить это в наши веб-задания, а затем я буду следить, чтобы увидеть, видим ли мы полные журналы. Спасибо всем за ваши предложения!

Вы должны быть в состоянии решить эту проблему, добавив одну строку кода в конце вашего приложения в StackifyLib для сброса.

StackifyLib.Logger.Shutdown();

https://github.com/stackify/stackify-api-dotnet/blob/master/README.md

Я надеюсь, что это исправит это для вас, если нет, обратитесь в службу поддержки Stackify.

Может быть хорошо с примером NLog-config. Если используется async-wrapper, то по умолчанию действие переполнения заключается в отбрасывании "случайных" сообщений.

Другие вопросы по тегам