日志管理
Server side(服務器端)
ASP.NET Boilerplate使用Castle Windsor's logging facility日志記錄工具,并且可以使用不同的日志類庫,比如:Log4Net, NLog, Serilog... 等等。對于所有的日志類庫,Castle提供了一個通用的接口來實現,我們可以很方便的處理各種特殊的日志庫,而且當業務需要的時候,很容易替換日志組件。
譯者注釋:Castle是什么:Castle是針對.NET平臺的一個開源項目,從數據訪問框架ORM到IOC容器,再到WEB層的MVC框架、AOP,基本包括了整個開發過程中的所有東西。ASP.NET Boilerplate的ioc容器就是通過Castle實現的。
Log4Net 是asp.net下面最流行的一個日志庫組件, ASP.NET Boilerplate 模板也使用了Log4Net日志庫組件,但是呢,我們這里僅僅通過一行關鍵代碼就實現Log4Net 的依賴注入(具體說明在下面的配置文件),所以,如果你想替換成自己的日志組件,也很容易。
獲取日志記錄器logger
不管你選擇哪一個日志庫組件,通過代碼來進行日志記錄都是一樣的。(這里吐槽, Castle's 通用 ILogger 接口實在太牛逼了)。
下面進入正題:(譯者注:下面的代碼是abp框架的Castle.Core源碼分析以及實現)
1、首先呢,我們要先處理日志記錄器對象logger, ASP.NET Boilerplate框架使用了dependency injection依賴注入技術,我們可以很方便的使用依賴注入生成日志記錄器對象logger。
接下來我們看一下 ASP.NET Boilerplate是怎么實現日志記錄功能的吧:
using Castle.Core.Logging; //1: 導入日志的命名空間,Castle.Core.Loggingpublic class TaskAppService : ITaskAppService{ //2:通過依賴注入獲取日志記錄器對象。 這里先定義了一個ILogger類型的public屬性Logger,這個對象就是我們用來記錄日志的對象。在創建了TaskAppService對象(就是我們應用中定義的任務)以后,通過屬性注入的方式來實現。 public ILogger Logger { get; set; } public TaskAppService() { //3: 如果沒有日志記錄器,將日志記錄器返回一個空的實例,不寫日志。這是依賴注入的最佳實現方式, // 如果你不定義這個空的日志記錄器,當我們獲取對象引用并且實例化的時候,就會產生異常。 // 這么做,保證了對象不為空。所以,換句話說,不設置日志記錄器,就不記錄日志,返回一個null的對象。 // NullLogger對象實際上什么都木有,空的。這么做,才能保證我們定義的類在實例化時正常運作。 Logger = NullLogger.Instance; } public void CreateTask(CreateTaskInput input) { //4: 寫入日志 Logger.Info("Creating a new task with description: " + input.Description); //TODO: save task to database... } }
復制代碼 代碼如下:
INFO 2014-07-13 13:40:23,360 [8 ] SimpleTaskSystem.Tasks.TaskAppService - Creating a new task with description:Remember to drink milk before sleeping!
新聞熱點
疑難解答