#asp.net-core #logging #local #azure-application-insights
Вопрос:
У меня есть приложение ASP .NET CORE с установленной программой application insights. Как настроить его для сохранения копии телеметрии в локальный файл (в дополнение к отправке в облако)?
Я не ищу функцию непрерывного экспорта (AFAIU, сначала она должна пройти через портал). Я ищу сценарий типа «сохраните 100% телеметрии локально, но отправьте выборочное подмножество в Azure».
Ответ №1:
Один из способов — добавить телеметрический процессор, который сохраняет элемент телеметрии локально и вызывает this.Next.Process(item)
.
В качестве альтернативы вы можете добиться того же с помощью TelemetrySink.
Первый подход, вероятно, проще.
Чтобы сохранить их в текстовом представлении, вы можете использовать Microsoft.ApplicationInsights.Extensibility.Implementation.JsonSerializer.Serialize
(принимает IEnumerable<ITelemetry> telemetryItems
). Это вернет массив байтов. Я предполагаю, что вызов Deserialize
этого массива байтов должен дать вам строковое представление json.
Комментарии:
1. Я сначала попробовал маршрут процессора, но потребовалась бы некоторая работа, чтобы правильно сериализовать все типы телеметрии, которые он может получать. AFAICS, я не должен просто конвертировать его в Json, так как это захватит содержимое его контекстной переменной. Знаете ли вы о существующем решении или способе преобразования произвольного элемента телеметрии в строку плоского журнала?
2. В Application Insights для этого есть функция (добавлена как часть ответа). Мы используем его в одном сценарии для сериализации в массив байтов. Я думаю, Десериализация должна дать вам строку.