5

是否可以在 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 语句将静态类纳入范围。

任何帮助都会很棒。
雅克

4

3 回答 3

11

我建议为此目的实现抽象基控制器类:

public abstract class BaseController : Controller
{
    public ILog Log
    {
        get { return LogManager.GetLogger(GetType()); }
    }
}

您也可以使用protected static日志实例来实现类似的结果,这是一个示例Serilog

protected static readonly ILogger log = Log.ForContext(typeof(MyController));
于 2013-09-02T08:52:05.100 回答
5

尝试

//inside a controller's method
this.Log().Info("hello");

您不是在添加属性Log,而是在添加扩展方法Log()

没有“扩展属性”之类的东西。

于 2013-09-02T08:29:55.843 回答
2

如何创建自定义操作过滤器?

创建ActionFilterattribute继承的类LogInfo

public class LogInfo : ActionFilterAttribute
    {

        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
           //Logging operation code here
        }
    }

控制器:

[LogInfo]
public ActionResult Index()
{
   return View();
}
于 2013-09-02T09:28:52.317 回答