Is it possible to extend the Controller type in Asp.net MVC to make a method available to all controller classes for application logging?
I've tried this:
public static class ControllerExtensions
{
public static ILog Log(this Controller controller)
{
log4net.Config.XmlConfigurator.Configure();
return log4net.LogManager.GetLogger(controller.GetType());
}
}
But, if I try to access the method as in:
Controller.Log.Info("hello");
It won't compile with the error message: 'System.Web.Mvc.Controller' does not contain a definition for 'Log'
I do have a using statement bringing the static class into scope.
Any help would be great.
Jacques
I would suggest to implement abstract base controller class for this purpose:
public abstract class BaseController : Controller
{
public ILog Log
{
get { return LogManager.GetLogger(GetType()); }
}
}
You can also achieve similar result using protected static
log instance, here is an example with Serilog
:
protected static readonly ILogger log = Log.ForContext(typeof(MyController));
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With