#azure #.net-core #azure-functions #azure-application-insights
#azure #.net-core #azure-функции #azure-application-insights
Вопрос:
У меня есть функция Azure V3 (.net core). Я использую ILogger от Microsoft.Расширения.Ведение журнала. Моя проблема в том, что я не могу заставить это делать:
-
Функция просто регистрирует то, что я добавляю в свой код на C #, используя ILogger. Либо информация, исключение, предупреждение, …
пример: журнал.LogInformation («мой журнал»);
-
Ничего из встроенных функций ведения журнала, включая ошибки, исключения, зависимости, ничего
Мне нужно точное значение журнала host.json, которое это делает.
ТОЛЬКО ТО, ЧТО я ВКЛАДЫВАЮ В КОД C #, И НИЧЕГО БОЛЬШЕ.
Пример моего кода:
[FunctionName("GetNetworkHouseDetail")]
public static IActionResult Run([HttpTrigger(AuthorizationLevel.Function, "get", Route = "network/houseMonitoringDevices")] HttpRequest req, ILogger log, ClaimsPrincipal claims)
{
try
{
var start = DateTime.UtcNow;
// some actions
var end = DateTime.UtcNow;
var duration = (end - start).TotalSeconds;
log.LogInformation($"API - GetNetworkHouseDetail: took {duration} second to finish");
return new OkObjectResult(JsonConvert.SerializeObject(result));
}
catch (Exception ex)
{
log.LogError($"{ex.GetExceptionMessages()}", ex);
}
}
Ответ №1:
Ну, для этого вы можете использовать уровень журнала. Из документов:
Вы можете использовать Application Insights без какой-либо пользовательской настройки. Конфигурация по умолчанию может привести к большим объемам данных. Если вы используете подписку Visual Studio Azure, вы можете превысить ограничение данных для анализа приложений. Далее в этой статье вы узнаете, как настраивать и настраивать данные, которые ваши функции отправляют в Application Insights. Для функционального приложения ведение журнала настраивается в файле host.json.
Используя LogLevel None, вы можете отключить все ведение журнала для заданных категорий и поставщиков.
Например, вы можете сделать
{
"version": "2.0",
"logging": {
"LogLevel": {
"Default": "None",
"Host.Results": "Information",
"Host.Aggregator": "Information",
"Function.MyFunction.User": "Information"
},
}
}
Это отключит все ведение журнала, кроме вашей функции. Категория журнала для функции, написанной вами, — «Функция.<ИМЯ_ФУНКЦИИ YOUR_FUNCTION_NAME>.User.». (Замените <ИМЯ_ФУНКЦИИYOUR_FUNCTION_NAME> на фактическое имя вашей функции из атрибута functionName в вашем коде)
К сожалению, вам нужно указать все функции, вы не можете включить символы, такие как указание "Function.*.User": "Information"
. Вы можете "Function": "Information"
установить уровень журнала для всех функций на Информацию, но тогда также появится дополнительное ведение журнала.
Это также исключит отслеживание зависимостей и запросов из ведения журнала. Посмотрите это.
Если вы в какой-то момент захотите включить запросы и зависимости, вам необходимо установить уровень журнала для всех категорий, начиная с «Функции» Information
.
Вы можете отключить ведение журнала из категорий хостов, но это особые категории, и теперь вы можете захотеть это сделать.
Комментарии:
1. эта конфигурация не регистрирует ни один из моих журналов. он выполняет только запросы из встроенных журналов.
2. @Daniel Как называется ваша функция и как вы вводите ILogger, можете ли вы опубликовать какой-нибудь код? Потому что я протестировал его с помощью своей собственной функции, и он выводит журналы пользователей. Вы заменили «myFunction» именем вашей функции в моем примере конфигурации?
3. У меня много функций, разве я не могу сделать что-то вроде star для всех функций? просто обновил вопрос с помощью примера кода
4. @Daniel и можете ли вы также опубликовать свой host.conf? Полную рабочую демонстрацию можно найти здесь
5. @Daniel: У меня много функций, разве я не могу сделать что-то вроде star для всех функций? просто обновил вопрос примером кода AFAIK нет, обновил мой ответ
Ответ №2:
Указание LogLevel "Function.MyFunction.User": "Information"
у меня вообще не работало, даже при явном написании всего пространства имен и имени функции. Но даже если бы это сработало, было бы очень сложно написать одну такую строку для каждой из ваших функций, не говоря уже о хрупкости при добавлении / удалении / переименовании функций и пространств имен. В итоге я получил уровень информации по умолчанию, а затем попытался «исключить» как можно больше категорий, не созданных пользователем. Кажется, пока все работает нормально.
"logLevel": {
"default": "Information",
"Azure": "Warning",
"Function": "Warning",
"Host": "Warning",
"Microsoft": "Warning",
"System": "Warning"
},