ASP.NET MVC控制器扩展方法,使所有控制器都可以使用Log
本文关键字:控制器 可以使 Log MVC NET 扩展 方法 ASP | 更新日期: 2023-09-27 18:29:56
是否可以在Asp.net MVC中扩展控制器类型,使一个方法可用于所有控制器类的应用程序日志记录
我试过这个:
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语句将静态类引入作用域。
任何帮助都会很棒
Jacques
我建议为此实现抽象的基本控制器类:
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));
尝试
//inside a controller's method
this.Log().Info("hello");
您不是在添加属性Log
,而是在添加扩展方法Log()
。
没有所谓的"扩展属性"。
创建一个自定义操作过滤器怎么样?
创建ActionFilterattribute继承的LogInfo类
public class LogInfo : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
//Logging operation code here
}
}
控制器:
[LogInfo]
public ActionResult Index()
{
return View();
}