首页 > 代码库 > 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>
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 }
log4net.Config.XmlConfigurator:
1、使用其他配置文件配置。
如果使用其他配置文件来配置的话,那么系统自带的 *.config 配置文件就不用添加任何东西,直接新建一个配置文件(比如:xxx.config),里面只要有 log4net 这个 section 就可以。
1 <?xml version="1.0" encoding="utf-8"?>2 <log4net>3 <!--这里是一些具体配置-->4 </log4net>
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>
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 }
上面这些代码只是一种展示,里面的语法是错误的,应该完全理解之后,结合自己的项目进行配搭。