How Orchard CMS does the logging?

后端 未结 2 2001
傲寒
傲寒 2021-02-14 20:10

I\'m working with Orchard CMS and it is better CMS for me. I want to understand how it does the logging and whether I can add my own logging or not. I saw that Orchard uses

相关标签:
2条回答
  • 2021-02-14 20:43

    An Autofac module (Orchard.Logging.LoggerModule to be precise) handles that. Basically - it scans each dependency and fills all properties of type ILogger with a reference to appropriate logger instance. Each dependency gets its own logger with name equal to full type name (including namespace) of a containing class.

    The NullLogger is just a placeholder so accessing the property would not throw NullReferenceExceptions before the property is being set by Autofac.

    Extending the default logging is a rather complicated task as it would involve doing three things:

    • create a custom implementation of ILoggerFactory (just like the default Orchard.Logging.CastleLoggerFactory) and
    • create an Autofac module that registers that implementation in the container (like the mentioned LoggerModule does)
    • suppress the current default logging module by decorating your new one with [OrchardSuppressDependency("Orchard.Logging.LoggingModule")]

    UPDATE

    Just realized I haven't addressed the most important part of the question here:) Yes, Orchard uses log4net so you may alter the default settings via Config/log4net.config file.

    0 讨论(0)
  • 2021-02-14 20:59

    There is a great article on how Orchard Logging works. (I am not sure if it is ok to copy and paste the entire article). This is the link: Injection Logger in Orchard

    So the trick is this:

    Whenever a class requires a Logger instance, all it needs to do is to declare a ILogger property, that’s it. And later, in your class, you can use this property to Logging at anytime

    And how is this done?

    When Orchard web application startup, the OrchardStarter will be used to do most of the registration work.

    In a few words, it looks all the code in all projects, gets all the classes that use an ILogger property, and implements it for you (if not implemented), using Castle's logger factory.

    0 讨论(0)
提交回复
热议问题