首页 > 代码库 > Apache log4net 配置的部分解释

Apache log4net 配置的部分解释

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.config

2、使用系统自带的 *.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


上面这些代码只是一种展示,里面的语法是错误的,应该完全理解之后,结合自己的项目进行配搭。