C# Azure функция ILoggerFactory Не регистрируется со справочной библиотекой - PullRequest
2 голосов
/ 10 января 2020

Я создал простую Azure функцию, используя c#, и я хотел бы реализовать ILoggerFactory для другой библиотеки классов. Вот мой код.

MyFunction => Class1 => Class2

namespace FunctionApp1
{
    public class MyFunction
    {
        private readonly ILogger _log;
        private readonly IClass1 _class1;

        public MyFunction(ILoggerFactory loggerFactory, IClass1 class1)
        {
            _log = loggerFactory.CreateLogger<MyFunction>();
            _class1 = class1;
        }

        [FunctionName("Function1")]
        public IActionResult Run(
            [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req)
        {
            _log.LogCritical("LogCritical MyFunction");
            _log.LogInformation("LogInformation MyFunction");
            _log.LogError("LogError MyFunction");
            _log.LogWarning("LogWarning MyFunction");

            string value = _class1.Test1(23);

            return new OkObjectResult($"Hello, {value}");
        }
    }
}

namespace ClassLibrary1
{
    public interface IClass1
    {
        string Test1(int x);
    }

    public class Class1 : IClass1
    {
        private readonly ILogger _log;
        private readonly IClass2 _class2;

        public Class1(ILoggerFactory loggerFactory, IClass2 class2)
        {
            _log = loggerFactory.CreateLogger<Class1>();
            _class2 = class2;
        }

        public string Test1(int x)
        {
            _log.LogCritical("LogCritical Class1");
            _log.LogInformation("LogInformation Class1");
            _log.LogError("LogError Class1");
            _log.LogWarning("LogWarning Class1");

            return _class2.Test2(x);
        }
    }
}

namespace ClassLibrary2
{
    public interface IClass2
    {
        string Test2(int x);
    }
    public class Class2 : IClass2
    {
        private readonly ILogger _log;

        public Class2(ILoggerFactory loggerFactory)
        {
            _log = loggerFactory.CreateLogger<Class2>();
        }

        public string Test2(int x)
        {
            _log.LogCritical("LogCritical Class2");
            _log.LogInformation("LogInformation Class2");
            _log.LogError("LogError Class2");
            _log.LogWarning("LogWarning Class2");

            return $"Entered : {x}";
        }
    }
}

[assembly: WebJobsStartup(typeof(FunctionApp1.StartUp))]
namespace FunctionApp1
{
    public class StartUp : IWebJobsStartup
    {
        public void Configure(IWebJobsBuilder builder)
        {
            builder.Services.AddSingleton<IClass1, Class1>();
            builder.Services.AddSingleton<IClass2, Class2>();
        }
    }
}

Моя проблема во время выполнения, она только регистрирует код в классе FunctionApp1. Есть ли способ зарегистрировать информацию или ошибку в другом классе, а не в приложении основной функции?

enter image description here

1 Ответ

3 голосов
/ 10 января 2020

Обновление:

как найти хост. json на azure портале:

1. enter image description here

2. enter image description here


Пожалуйста, попробуйте добавить уровень журнала с соответствующим namespace_name.class_Name в host.json:

Вот файл host. json file (убедитесь, что щелкните правой кнопкой мыши узел. json -> Свойства -> установите для параметра «Копировать в выходной каталог» значение «Копировать, если новее»):

{
  "version": "2.0",
  "logging": {
    "logLevel": {
      "ClassLibrary1.Class1": "Information",
      "ClassLibrary2.Class2": "Information"
    }
  }
}

Затем все журналы будут распечатаны:

enter image description here

Более подробную информацию можно найти в этом выпуске GitHub .

...