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
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 NullReferenceException
s before the property is being set by Autofac.
Extending the default logging is a rather complicated task as it would involve doing three things:
LoggerModule
does)[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.
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.