log4net 其實可以使用 系統自帶的 *.config 配置文件 來配置,也可以使用 其他配置文件 來配置。
這兩種配置方式決定了 log4net 使用哪些方式來讀取配置信息,從而也決定了一些特性。
log4net 用來讀取配置文件的方式有兩種,一種是 ASP.NET 的 System.Configuration API,另一種是 log4net 的 log4net.Config.XmlConfigurator。
那麼他們的區別在哪裡呢?
System.Configuration API:
1、只能使用系統自帶的 *.config 配置文件來配置(WinForm 是 XXX.exe.config,WebForm 是 web.config)。
(「因為 System.Configuration API 不能重新加載配置文件」,此乃英文文檔的直譯,我估計他的意思是,配置文件只能從系統自帶的 *.config 配置文件一次性讀取,不能進行二次讀取,所以就不能使用其他配置文件來配置了,就算配置了也讀取不了。)
2、不能監控配置文件的變動。意思就是,你的程序一旦運行著,你修改配置文件(比如:由寫入文本文件改為寫入數據庫)是沒有作用的。
(這點可以從上面一點的解釋那裡可以知道,因為 System.Configuration API 不能重新加載配置文件。)
3、讀取配置權限跟著 ASP.NET 或者 IIS,所以配置應用程序權限的時候,完全不用擔心配置文件的權限問題。
log4net.Config.XmlConfigurator:
1、與上面相反,可以使用系統自帶的 *.config 配置文件來配置,也可以使用其他配置文件來配置。
2、與上面相反,可以進行監控,有改動立馬生效。
3、與上面相反,絕對要搞清楚程序是否有權限讀取文件。
那兩種方式應該怎麼配置呢?
System.Configuration API:
1 <?xml version="1.0" encoding="utf-8"?> 2 <configuration> 3 <configSections> 4 <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> 5 <!--這一段很重要,它的意思就是,下面 log4net 這一個 section 使用後面這個程序來處理,這個程序其實就是調用 System.Configuration API,所以聲明這一段就是代表使用 System.Configuration API。--> 6 </configSections> 7 <log4net> 8 <!--這裡是一些具體配置--> 9 </log4net> 10 </configuration> web.config 1 [XmlConfigurator] 2 //[XmlConfigurator(ConfigFile = "xxx.config")] //不可用。 3 //[XmlConfigurator(ConfigFileExtension = "config")] //不可用。 4 //[XmlConfigurator(Watch = true)] //不可用。 5 class Program 6 { 7 static void Main(string[] args) 8 { 9 //下面這兩個可用,二選一。 10 XmlConfigurator.Configure();//這一條等同於 [XmlConfigurator]。 11 XmlConfigurator.Configure(log4net.LogManager.GetRepository("DEBUG")); 12 13 //下面這個是不可用的。 14 //XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo(@"~\xxx.config")); //不可用。 15 } 16 } Log4netDemo.cs
log4net.Config.XmlConfigurator:
1、使用其他配置文件配置。
如果使用其他配置文件來配置的話,那麼系統自帶的 *.config 配置文件就不用添加任何東西,直接新建一個配置文件(比如:xxx.config),裡面只要有 log4net 這個 section 就可以。
1 <?xml version="1.0" encoding="utf-8"?> 2 <log4net> 3 <!--這裡是一些具體配置--> 4 </log4net> xxx.config2、使用系統自帶的 *.config 配置文件配置。
1 <?xml version="1.0" encoding="utf-8"?> 2 <configuration> 3 <configSections> 4 <section name="log4net" type="System.Configuration.IgnoreSectionHandler" /> 5 <!--因為這是系統的配置文件,所以裡面的每個 section 都要正確,但是下面 log4net 對於系統來說是不正確的,如果不寫這一段會報錯,這一段的意思是忽略 log4net 這個 section 的意思。--> 6 </configSections> 7 <log4net> 8 <!--這裡是一些具體配置--> 9 </log4net> 10 </configuration> web.config 1 //下面的都可用。 2 [XmlConfigurator]//使用系統自帶的 *.config 配置文件。 3 [XmlConfigurator(ConfigFile = "xxx.config")]//使用其他配置文件配置。 4 [XmlConfigurator(ConfigFileExtension = "config")]//使用其他配置文件配置。 5 [XmlConfigurator(Watch = true)]//監控配置文件。 6 class Program 7 { 8 static void Main(string[] args) 9 { 10 //下面的都可用。 11 XmlConfigurator.Configure();//這一條等同於 [XmlConfigurator] 聲明。 12 XmlConfigurator.Configure(log4net.LogManager.GetRepository("DEBUG")); 13 14 XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo(@"~\xxx.config"));//這一條等同於 [XmlConfigurator(ConfigFile = "xxx.config", Watch = true)] 聲明。 15 } 16 } Log4netDemo.cs
上面這些代碼只是一種展示,裡面的語法是錯誤的,應該完全理解之後,結合自己的項目進行配搭。
<param name="DatePattern" value="yyyy-MM-dd.HH".log""/>
詳細介紹看這裡:blog.csdn.net/...669232
可以當做資源文件編譯到dll或者exe裡面,用的時候釋放出來就行了。不過也可以寫代碼代替log4net