2012-02-10 20 views
9

Pracuję z Orchard CMS i dla mnie jest to lepszy CMS. Chcę zrozumieć, jak to się dzieje i czy mogę dodać własne logowanie, czy nie. Widziałem, że Orchard używa klasy NullLogger i nie działa. Otworzyłem folder App_Data.Logs i widziałem, że istnieją pliki dziennika. Ale jak? Szukałem w kodzie gdzie jest trik, który zastępuje NullLogger log4net (domyślam się, że to log4net, ponieważ format logu i formatowanie dla log4net.config są bardzo podobne), ale nie znalazłem tego. Czy ktoś może mi odpowiedzieć:Jak Orchard CMS wykonuje rejestrację?

  1. Jak Orchard prowadzi rejestrację?
  2. Czy mogę dodać własny rejestrator, a jeśli tak, jakie są najlepsze praktyki, aby to zrobić?

Dzięki, Andrey.

Odpowiedz

16

Moduł Autofac (dokładniej, Orchard.Logging.LoggerModule) obsługuje to. Zasadniczo - skanuje każdą zależność i wypełnia wszystkie właściwości typu ILogger z odniesieniem do odpowiedniej instancji rejestratora. Każda zależność otrzymuje własny rejestrator o nazwie o nazwie równej pełnej nazwie typu (w tym przestrzeni nazw) klasy zawierającej.

Obiekt jest tylko symbolem zastępczym, więc uzyskanie dostępu do usługi nie spowoduje przesłania NullReferenceException s zanim właściwość zostanie ustawiona przez Autofac.

Rozszerzenie domyślne rejestrowanie jest dość skomplikowane zadanie, ponieważ wiązałoby się to robić trzy rzeczy:

  • utworzyć niestandardową implementację ILoggerFactory (podobnie jak domyślna Orchard.Logging.CastleLoggerFactory) i
  • utworzyć moduł Autofac, który rejestruje tę implementację w kontenerze (jak wspomniana)
  • pomiń bieżącą wartość domyślną l ogging moduł przez dekoracji nowy z [OrchardSuppressDependency("Orchard.Logging.LoggingModule")]

UPDATE

sobie sprawę, że nie zwrócił się do najważniejszej części stąd pytanie :) Tak, Orchard używa log4net więc może zmienić domyślne ustawienia za pomocą pliku konfiguracyjnego Config/log4net.config.

+0

Wielkie dzięki, przydaje się dla mnie. Ale nie rozumiem jeszcze, w którym miejscu Orchard skonfigurowany jest aktualnie używany rejestrator. Jest w pliku log4net.config lub gdzieś indziej? –

+0

Ok, znalazłem odpowiedź. Naprawdę używa plików log4net.config. Dzięki. –

+0

Czy istnieje sposób, w jaki mogę utworzyć program rejestrujący, aby obsłużyć wszystkie rejestrowania dla określonej przestrzeni nazw? Czy jest to specyficzne dla klasy? –

1

Istnieje świetny artykuł na temat działania Orchard Logging. (Nie jestem pewien, czy można skopiować i wkleić cały artykuł). To jest link: Injection Logger in Orchard

Więc sztuczka jest taka:

Ilekroć klasa wymaga instancji Logger, wszystko to musi zrobić, to zadeklarować właściwość ILogger, to wszystko. Później, w twojej klasie, możesz używać tej właściwości do rejestrowania w dowolnym czasie

Jak to się robi?

Podczas uruchamiania aplikacji internetowej Orchard, OrchardStarter zostanie użyty do wykonania większości prac związanych z rejestracją.

W kilku słowach wygląda na cały kod we wszystkich projektach, pobiera wszystkie klasy, które używają właściwości ILogger i implementuje je dla ciebie (jeśli nie są zaimplementowane), używając fabryki rejestratorów Castle.

Powiązane problemy