Как Orchard CMS ведет логирование? - PullRequest
9 голосов
/ 10 февраля 2012

Я работаю с Orchard CMS, и она лучше для меня. Я хочу понять, как это делает регистрацию и могу ли я добавить свою собственную регистрацию или нет. Я видел, что Орчард использует класс NullLogger, и он не работает. Я открыл папку App_Data.Logs и увидел, что есть файлы журнала. Но как? Я искал в коде, где трюк, который заменяет NullLogger на log4net (я думаю, это log4net, потому что формат журнала и форматирование для log4net.config очень похожи), но я не нашел этого. Может кто-нибудь ответить мне:

  1. Как Орчард ведет лесозаготовку?
  2. Могу ли я добавить свой собственный регистратор и, если да, какие существуют рекомендации для этого?

Спасибо, Андрей.

Ответы [ 2 ]

16 голосов
/ 10 февраля 2012

Модуль Autofac (точнее, Orchard.Logging.LoggerModule) обрабатывает это.В основном - он сканирует каждую зависимость и заполняет все свойства типа ILogger ссылкой на соответствующий экземпляр регистратора.Каждая зависимость получает свой собственный регистратор с именем, равным полному имени типа (включая пространство имен) содержащего класса .

. NullLogger - это просто заполнитель, поэтому доступ к свойству не вызовет *За 1008 * с до того, как свойство будет установлено Autofac.

Расширение ведения журнала по умолчанию является довольно сложной задачей, так как включает в себя три вещи:

  • создание пользовательскогореализация ILoggerFactory (точно так же, как по умолчанию Orchard.Logging.CastleLoggerFactory) и
  • создают модуль Autofac , который регистрирует эту реализацию в контейнере (как упомянуто LoggerModule)
  • подавить текущий модуль регистрации по умолчанию , украсив новый с помощью [OrchardSuppressDependency("Orchard.Logging.LoggingModule")]

UPDATE

Простопонял, что я не рассмотрел самую важную часть вопроса здесь :) Да, Orchard использует log4net , поэтому вы можете изменить настройки по умолчанию с помощью Config / log4net.config file.

1 голос
/ 21 марта 2016

Есть отличная статья о том, как работает Orchard Logging.(Я не уверен, можно ли скопировать и вставить всю статью целиком).Это ссылка: Injection Logger в саду

Итак, хитрость такова:

Когда класс требует экземпляр Logger, все, что ему нужно сделать,объявить свойство ILogger, вот и все.И позже, в вашем классе, вы можете использовать это свойство для ведения журнала в любое времяиспользуется для выполнения большей части работы по регистрации.

В нескольких словах он просматривает весь код во всех проектах, получает все классы, использующие свойство ILogger, и реализует его для вас (если нетреализовано), используя фабрику регистраторов Касла.

...