В статье MS docs "Введение в ведение журнала в ASP.NET Core" приводятся 2 примера внедрения конструктора
-
используя ILogger
private readonly ILogger _logger; public TodoController(ILogger<TodoController> logger) { _logger = logger; }
-
и ILoggerFactory
private readonly ILogger _logger; public TodoController( ILoggerFactory loggerFactory) { _logger = loggerFactory.CreateLogger<TodoController>(); }
Мой вопрос заключается в том, что я должен пройти к дочерним классам, вызываемым из моего контроллера
-
передать ILoggerFactory мои дочерние классы, вызванные из контроллера и в каждом вызове класса
LoggerFactoryExtensions.CreateLogger<MyChildClass>()
или -
передать родительский контроллер
ILogger<MyController>
для каждого дочернего класса созданный с контроллера и имеющий не общий параметр ILogger.
В журналах я предпочитаю видеть отдельную категорию "MyChildClass" для каждого класса, а не все классы используют категорию "MyController" из родительского контроллера.
Однако CreateLogger в каждой конструкции объекта может быть дорогостоящей операцией (например, см. https://github.com/aspnet/Logging/issues/524)
Какой вариант вы порекомендуете? Можете ли вы предложить какой-либо другой подход?