簡體   English   中英

ASP.NET MVC 控制器擴展方法使日志可用於所有控制器

[英]ASP.NET MVC Controller extension method to make Log available to all controllers

是否可以在 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”不包含“日志”的定義

我確實有一個 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
        }
    }

控制器:

[LogInfo]
public ActionResult Index()
{
   return View();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM