Регистратор инъекций приложения-функции Azure не ведет журнал

У меня есть приложение-функция, которое я пытаюсь использовать DI в классе для регистратора, чтобы мне не приходилось передавать ILogger каждой функции. Я провел некоторое исследование и нашел, где я должен использовать ILogger в конструкторе класса. Я сделал все изменения, которые считаю правильными, но он по-прежнему ничего не регистрирует в этом классе.

Я добавил ведение журнала в свой класс Startup, обновил файл hosts.json и использовал ILogger в конструкторе. Ошибок нет, но ничего не логируется. Кто-нибудь видит что-то, что я упускаю?

Startup.cs

public override void Configure(IFunctionsHostBuilder builder)
        {
            builder.Services.AddLogging();
            builder.Services.AddTransient<IDataManager, DataManager>();
        }

Хост.json

{
  "version": "2.0",
  "logging": {
    "fileLoggingMode": "always",
    "logLevel": {
      "default": "Debug"
    },
    "applicationInsights": {
      "samplingSettings": {
        "isEnabled": false,
        "excludedTypes": "Request"
      }
    }
  }
}

DataManager.cs

public class DataManager : IDataManager
    {
        private DataContext _db;
        private readonly ILogger<DataManager> _log;

        public DataManager(ILogger<DataManager> log, DataContext dataContext)
        {
            _db = dataContext;
            _log = log;
        }
}
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
0
66
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я воспроизвел в своей среде и получил ожидаемые результаты, как показано ниже, и код, взятый из репозитория @nareshnagpal06 GitHub:

Запуск.cs:

using Microsoft.Azure.Functions.Extensions.DependencyInjection; // install nuget - "Microsoft.Azure.Functions.Extensions"
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Text;

[assembly: FunctionsStartup(typeof(FunctionApp50.Startup))]

namespace FunctionApp50
{
    public class Startup : FunctionsStartup
    {
        public override void Configure(IFunctionsHostBuilder builder)
        {
            builder.Services.AddSingleton<IHelperClass, HelperClass>();

        }
    }
}

HelperClass.cs:

using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Text;

namespace FunctionApp50
{
    public class HelperClass : IHelperClass
    {
        private static ILogger<IHelperClass> _logger;
        public HelperClass(ILogger<IHelperClass> logger)
        {

            _logger = logger;
        }
        public void Dowork()
        {
            _logger.LogInformation("Dowork: Execution Started");
            /* rest of the functionality below
                .....
                .....
            */
            _logger.LogInformation("Dowork: Execution Completed");
        }
    }
}

IHelperClass.cs:

using System;
using System.Collections.Generic;
using System.Text;

namespace FunctionApp50
{
    public interface IHelperClass
    {
        void Dowork();
    }
}

Функция1.cs:

using System;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using Microsoft.Extensions.Logging;

namespace FunctionApp50
{
    public class Function1 // Ensure class is not static (which comes by default)
    {
        private IHelperClass _helper;

        public Function1(IHelperClass helper)
        {
            _helper = helper;
        }

        [FunctionName("Function1")]
        public void Run([TimerTrigger("0 */1 * * * *")] TimerInfo myTimer, ILogger log)
        {
            log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
            // call helper 
            _helper.Dowork();
        }
    }
}

хост.json:

{
  "version": "2.0",
  "logging": {
    "fileLoggingMode": "always",
    "applicationInsights": {
      "samplingExcludedTypes": "Request",
      "samplingSettings": {
        "isEnabled": true
      }
    },
    "logLevel": {
      "Function": "Information"
    }
  }
}

Выход терминала:

Вывод файла:

Сначала запустите, затем вставьте %temp%\LogFiles\Application\Functions., затем нажмите файл хоста в нужном месте, затем нажмите файл журнала, и результат будет таким:

Я все еще не показываюсь в App Insights. У меня есть все, что у вас есть, за исключением того, что я называю свой DataManger вместо HelperClass. «Журнал ILogger» в моей функции регистрируется, но как только я перехожу к своему классу DataManager, ничего не регистрируется. Единственное, что я действительно видел для изменения, это то, что я использовал частный статический ILogger<DataManager> _log и изменил его, чтобы использовать интерфейс, как у вас. частный статический ILogger<IDataManager> _log. Я также специально добавил «Namespace.DataManager»: «Debug» вместо «Namespace»: «Debug» в файле hosts. Я вижу журналы в терминале, но не вижу App Insights.

Caverman 15.02.2023 04:04

Я не понял, где искать File Output. Просматриваете это на своем локальном компьютере или на портале Azure? Я работаю в Azure и просматриваю Azure App Insights.

Caverman 15.02.2023 04:05

В разделе «Журналы» Application Insights я получил журналы как i.imgur.com/t4jWcHD.png Вы можете проверить, используя трассировки запросов.

RithwikBojja 15.02.2023 04:45

Вы получите журналы, как я получил

RithwikBojja 15.02.2023 04:46

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