亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > .NET > 正文

ABP框架中的日志功能完全解析

2024-07-10 13:30:47
字體:
來源:轉載
供稿:網友

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!
 
通過基類使用Logger

ASP.NET Boilerplate框架提供了MVC Controllers、Web API Controllers和Application service classes的基類(自己定義的控制器和應用服務,都必須要繼承ASP.NET Boilerplate的基類,換句話說,當你自定義的Web API controllers、mvc controllers,Application service classes都繼承了ASP.NET Boilerplate框架對應的基類,你就可以直接使用日志記錄器)。

public class HomeController : SimpleTaskSystemControllerBase {   public ActionResult Index()   {    Logger.Debug("A sample log message...");    return View();   } } 

說明:SimpleTaskSystemControllerBase這個基類控制器是我們自己定義的基類控制器,他必須繼承自 AbpController。

這樣實現,日志記錄器才能正常工作。當然了,你也可以實現自己的基類,這樣的話你也可以不使用依賴注入了。

配置

如果你在官網上通過ASP.NET Boilerplate templates 來生成了你的工程,Log4Net的所有配置都自動生成了。

默認的配置格式如下:

  • Log level: 日志記錄等級,有DEBUG, INFO, WARN, ERROR or FATAL5個。
  • Date and time: 日志記錄時間。
  • Thread number: 每行日志寫時候的線程號。
  • Logger name: 日志記錄器的名字,通常情況就是類名稱。
  • Log text: 你寫入的日志內容。

配置文件:log4net.config 一般都在項目的web目錄下面。

<?xml version="1.0" encoding="utf-8" ?><log4net> <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender" >  <file value="Logs/Logs.txt" />  <appendToFile value="true" />  <rollingStyle value="Size" />  <maxSizeRollBackups value="10" />  <maximumFileSize value="10000KB" />  <staticLogFileName value="true" />  <layout type="log4net.Layout.PatternLayout">    <conversionPattern value="%-5level %date [%-5.5thread] %-40.40logger - %message%newline" />  </layout> </appender> <root>  <appender-ref ref="RollingFileAppender" />  <level value="DEBUG" /> </root> <logger name="NHibernate">  <level value="WARN" /> </logger></log4net>

Log4Net是一個非常強大和易用的日志庫組件,你可以寫各種日志,比如寫到txt文件,寫入到數據庫等等。你能設置最小的日志等級,就像上面這個針對NHibernate的配置。不同的記錄器寫不同的日志,等等。

具體的用法大家可以參照:http://logging.apache.org/log4net/release/config-examples.html

最后,在工程的Global.asax 文件中,來定義Log4Net的配置文件:

public class MvcApplication : AbpWebApplication{  protected override void Application_Start(object sender, EventArgs e)  {    IocManager.Instance.IocContainer.AddFacility<LoggingFacility>(f => f.UseLog4Net().WithConfig("log4net.config"));    base.Application_Start(sender, e);  }}

幾行代碼就調用了Log4Net這個日志記錄組件,工程中的Log4Net庫是在 nuget package包中的,你也可以換成其他日志組件庫,但是代碼不用做任何改變。因為,我們的框架是通過依賴注入實現日志記錄器的!

Client side(客戶端)

最后,更厲害的是,你還可以在客戶端調用日志記錄器。在客戶端,ASP.NET Boilerplate框架有對應的 javascript 日志API,這意味著你可以記錄下來瀏覽器的日志,實現代碼如下:

abp.log.warn('a sample log message...'); 

 附上:客戶端javascript的api,這里要說明的是,你可以使用console.log在客戶端輸出日志,但是這個API 不一定支持所有的瀏覽器,還有可能導致你的腳本出現異常,你可以使用我們的api,我們的是安全的,你甚至可以重載或者擴展這些api。

abp.log.debug('...');abp.log.info('...');abp.log.warn('...');abp.log.error('...'); abp.log.fatal('...');


審計跟蹤日志
ABP提供了能夠為應用程序交互自動記錄日志的基礎設施,它能記錄你調用的方法的調用者信息和參數信息。從根本上來說,存儲區域包含:

  • tenant id(相關的租戶Id),
  • user id(請求用戶Id),
  • server name(請求的服務名稱【調用方法對應的類】),
  • method name(調用方法名稱),
  • parameters(方法的參數【JSON格式】),
  • execution time(執行時間),
  • duration (執行耗時時間【通常是毫秒】),
  • IP address (客戶端IP地址),
  • computer name(客戶機名稱),
  • exception (異?!救绻椒⊕伋霎惓!浚┑刃畔ⅰ?/li>

有了這些信息,我們不僅能夠知道誰進行了操作,還能夠估算出應用程序的性能及拋出的異常。甚至更多的,你可以得到有關應用程序的使用情況統計。

審計系統使用IAbpSession接口來獲取當前用戶Id和租戶ID。

注意:關于IAuditingStore接口

審計系統使用IAuditingStore接口來保存審計信息。module-zero項目是這個接口的完整實現,當然你也可以通過自己的方式來實現這個接口。如果你不想自己實現這個接口,SimpleLogAuditingStore類可以直接拿來使用,它是實現方式是將審計信息寫入日志中。

 配置:
可以在你的模塊初始化方法(PreInitialize)中使用Configuration.Auditing的屬性來配置審計,Auditing屬性默認是啟用狀態(即true)。你可以禁用它,如下圖所示:

public class MyModule : AbpModule{  public override void PreInitialize()  {    Configuration.Auditing.IsEnabled = false;  }  //...}

以下是審計配置的屬性:

IsEnabled: 用于設置完全啟用或禁用審計系統。默認值:true.IsEnabledForAnonymousUsers:如果設置成ture,未登陸的用戶的審計日志也會保存。默認值: false.MvcControllers: 在ASP.NET MVC 控制器中使用審計日志IsEnabled: 在ASP.NET MVC中啟用(true)或禁用(false)審計日志. 默認值: true.IsEnabledForChildActions: 為MVC actions啟用(true)或禁用(false)審計日志. 默認值: false.Selectors: 選擇使用其他類來處理審計日志的存儲。

正如你所看到的,審計系統單獨為mvc控制器提供了審計配置使之可以使用不同的方法來使用它。

Selectors是一個斷言(推斷類型)選擇器列表,用于選擇那種方式來保存審計日志。每一個選擇器包含一個唯一的名稱和一個斷言。斷言列表中默認的選擇器,使用的是應用程序服務類。如下圖所示:

Configuration.Auditing.Selectors.Add(  new NamedTypeSelector(    "Abp.ApplicationServices",    type => typeof (IApplicationService).IsAssignableFrom(type)  ));

你可以在自己的模塊初始化方法(PreInitialize)中添加自己的斷言選擇器。同樣的,如果你不喜歡使用應用程序服務來保存審計日志,你也可以通過名稱(name)來移除斷言選擇器,這就是為什么斷言選擇器的名稱必須是唯一的(你也可以通過Linq的方式查找到選擇器來移除它)。

通過屬性來啟用和禁用審計日志:
當你使用配置項來配置斷言選擇器時,你可以通過使用Audited和DisableAuditing特性標記到單個類或單個方法來實現審計系統的啟用和禁用。例如:

[Audited]public class MyClass{  public void MyMethod1(int a)  {    //...  }  [DisableAuditing]  public void MyMethod2(string b)  {    //...  }  public void MyMethod3(int a, int b)  {    //...  }}

上述列子中,MyClass類中除了MyMethod2明確標記不需要審計外,其他的方法都會被審計。Audited特性能夠幫助你只想保存審計日志的方法,進行審計日志保存。


注:相關教程知識閱讀請移步到ASP.NET教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美成人午夜激情在线| 欧美一级片一区| 在线视频日本亚洲性| 久久国产精品久久久久| 日韩精品视频观看| 亚洲人成电影在线观看天堂色| 亚洲一区二区少妇| 欧美视频在线观看免费网址| 黑丝美女久久久| 久久久久久久久91| 欧美激情精品久久久久久免费印度| 国产美女久久精品香蕉69| 欧美激情精品久久久久久大尺度| 久久精品国产成人| 日本精品视频在线| 一区二区欧美亚洲| 亚洲成人av片| 欧美午夜激情在线| 日韩精品小视频| 成人免费自拍视频| 亚洲国产一区二区三区在线观看| 久久男人资源视频| 精品中文字幕在线| 97久久精品国产| 美女久久久久久久久久久| 国内免费精品永久在线视频| 国产国产精品人在线视| 久久99亚洲精品| 亚洲综合最新在线| 亚洲国产精品女人久久久| 91亚洲国产精品| 国产精品精品视频| 日韩免费高清在线观看| 久久久久久亚洲| 亚洲精品欧美日韩专区| 欧美视频在线视频| 秋霞成人午夜鲁丝一区二区三区| 久久夜色精品亚洲噜噜国产mv| 国产精品久久久一区| 成人妇女免费播放久久久| 在线视频欧美性高潮| 欧美精品videosex极品1| 日韩免费不卡av| 亚洲精品免费网站| 国产精品aaa| 亚洲香蕉av在线一区二区三区| 日韩激情av在线播放| 欧美巨乳在线观看| 日韩成人在线电影网| 国产99久久久欧美黑人| 久久久久久国产精品美女| 中文字幕日韩av| 日韩在线播放视频| 亚洲精品国产精品国自产观看浪潮| 久久免费少妇高潮久久精品99| 国产精品久久综合av爱欲tv| 中文字幕在线成人| 欧美激情精品在线| 国产精品美女视频网站| 国产精品久久久久久久久久久新郎| 日韩理论片久久| 国产精品视频精品| 国产精品福利网| 久久久国产精品亚洲一区| 琪琪亚洲精品午夜在线| 欧美日韩xxxxx| 国产精品毛片a∨一区二区三区|国| 国产亚洲欧洲在线| 九九视频直播综合网| 精品久久久久久久大神国产| 日韩在线视频网| 91精品国产91久久久久久不卡| 日本不卡视频在线播放| 欧美日韩一二三四五区| 欧美性猛交xxxx富婆| 欧美日韩亚洲成人| 国产精品999999| 色综合91久久精品中文字幕| 中文字幕免费国产精品| 久久艹在线视频| 欧美亚洲伦理www| 国产视频久久网| 亚洲一区二区国产| 国产色综合天天综合网| 亚洲网站在线观看| 欧美性生交xxxxx久久久| 性色av一区二区咪爱| 另类少妇人与禽zozz0性伦| 岛国av一区二区三区| 国产热re99久久6国产精品| 在线日韩日本国产亚洲| 亚洲国产成人一区| 亚洲91av视频| 久久99热精品这里久久精品| 久久国产精品久久久久| 欧美成人精品在线播放| 亚洲精品电影网| 欧美极品少妇与黑人| 久久偷看各类女兵18女厕嘘嘘| 色综合天天狠天天透天天伊人| 亚洲图片制服诱惑| 亚洲黄色在线观看| 97视频在线播放| 国产精品精品视频一区二区三区| 尤物九九久久国产精品的特点| 欧美大片va欧美在线播放| 亚洲香蕉在线观看| 人妖精品videosex性欧美| 日韩在线观看免费全| 亚洲黄页网在线观看| 久久久久久久久久国产精品| 亚洲欧美另类自拍| 欧美有码在线观看视频| 91九色视频导航| 91成品人片a无限观看| 日韩电影大全免费观看2023年上| 91成人在线观看国产| 欧美最猛黑人xxxx黑人猛叫黄| 久久久久一本一区二区青青蜜月| 日韩综合中文字幕| 法国裸体一区二区| 日韩精品免费综合视频在线播放| 国产97在线亚洲| 中文字幕成人精品久久不卡| 黑人狂躁日本妞一区二区三区| 亚洲第一精品福利| 欧美激情免费观看| 亚洲成人动漫在线播放| 中文字幕欧美日韩精品| 亚洲视频在线免费观看| 国产婷婷色综合av蜜臀av| 少妇激情综合网| 日韩免费视频在线观看| 青青久久av北条麻妃海外网| 欧美日韩性生活视频| 日本高清+成人网在线观看| 国产婷婷成人久久av免费高清| 美女扒开尿口让男人操亚洲视频网站| 不卡在线观看电视剧完整版| 91av视频在线| 成人亲热视频网站| 国产丝袜一区二区三区免费视频| 69精品小视频| 久久久久久国产| 日本在线精品视频| 91免费欧美精品| 日韩av免费在线播放| 91香蕉嫩草神马影院在线观看| 国产日韩欧美视频| 97精品国产97久久久久久| 1769国内精品视频在线播放| 日韩精品极品毛片系列视频| 久久久影视精品| 欧美激情视频在线免费观看 欧美视频免费一| 国产精品自产拍在线观看中文| 日韩中文字幕在线免费观看| 久久成人精品视频| 亚洲美女动态图120秒| 亚洲精品成a人在线观看| 欧美成aaa人片在线观看蜜臀| 欧美日韩中文在线观看| 欧美极品美女视频网站在线观看免费| 亚洲国内高清视频| 激情成人在线视频|