是否可以在Asp.net MVC中扩展Controller类型,以便为所有控制器类提供应用程序日志记录的方法?
我试过这个:
public static class ControllerExtensions
{
public static ILog Log(this Controller controller)
{
log4net.Config.XmlConfigurator.Configure();
return log4net.LogManager.GetLogger(controller.GetType());
}
}
但是,如果我尝试按以下方式访问该方法:
Controller.Log.Info("hello");
它不会使用错误消息进行编译:'System.Web.Mvc.Controller'不包含'Log'的定义
我有一个using语句将静态类带入范围。
任何帮助都会很棒 雅克
答案 0 :(得分:9)
我建议为此目的实现抽象基类控制器类:
public abstract class BaseController : Controller
{
public ILog Log
{
get { return LogManager.GetLogger(GetType()); }
}
}
答案 1 :(得分:4)
尝试
//inside a controller's method
this.Log().Info("hello");
您没有添加属性Log
,而是添加了扩展方法Log()
。
没有“扩展属性”这样的东西。
答案 2 :(得分:2)
如何创建自定义操作过滤器?
创建一个由ActionFilterattribute继承的类LogInfo
public class LogInfo : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
//Logging operation code here
}
}
<强>控制器:强>
[LogInfo]
public ActionResult Index()
{
return View();
}