是否有可能在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语句将静态类纳入范围。
任何帮助都会很棒。雅克
为此,我建议实现抽象基本控制器类:
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
}
}
Controller:
[LogInfo]
public ActionResult Index()
{
return View();
}