Log For log4net (二) — 配置特性与配置文件
Friday, April 27, 2007
接上篇
注:Attribute译为“特性”,Property译为“属性”
原文地址:log4net Manual - Configuration
配置特性
log4net除可以通过编程配置外还可以利用组件级别的特性进行配置
XmlConfiguratorAttribute
log4net.Config.XmlConfiguratorAttribute允许通过下列属性对XmlConfigurator进行配置。
configFile:指定对XmlConfigurator进使用的配置文件名,文件路径相对于程序的根文件夹(AppDomain.CurrentDomain.BaseDirectory)
ConfigFileExtension:指定配置文件的扩展名,组件集文件名加上指定的扩展名通常即配置文件名。例如从TestApp.exe中读取的组件制定ConfigFileExtension属性为log4net,则配置文件名为TestApp.exe.log4net。其效果与制定configFile属性为TestApp.exe.log4net相同。
配置文件的路径为程序根文件夹(AppDomain.CurrentDomain.BaseDirectory)。
这个属性不能与configFile属性一起使用。
Watch:如果这个属性设为true,程序将会监视配置文件并在文件变化时重新载入配置。
如果configFile和ConfigFileExtension属性均没有指定,log4net将会使用应用程序配置文件(例如TestApp.exe.config)
示例用法
1: // Configure log4net using the .config file
2: [assembly: log4net.Config.XmlConfigurator(Watch=true)]
3: // This will cause log4net to look for a configuration file
4: // called TestApp.exe.config in the application base
5: // directory (i.e. the directory containing TestApp.exe)
6: // The config file will be watched for changes.
1: // Configure log4net using the .log4net file
2: [assembly: log4net.Config.XmlConfigurator(ConfigFileExtension="log4net",Watch=true)]
3: // This will cause log4net to look for a configuration file
4: // called TestApp.exe.log4net in the application base
5: // directory (i.e. the directory containing TestApp.exe)
6: // The config file will be watched for changes.
特性在一个组件集中只能使用一次
使用特性可以清晰的指定应用程序从何处加载配置文件,但特性是完全被动的,将不会起任何作用,他们只是一些信息。因此如果你使用了配置特性必须调用log4net允让它读取特性,简单的调用LogManager.GetLogger便可以使程序集中的特性能够被读取和处理。因此程序启动后尽早调用logging方法是必要的,而且必须在任何外部的组件集在读取和调用之前。
配置文件
典型的log4net配置是通过文件,文件可以通过两种方式读取
1. 使用.NET System.Configuration API
2. 直接读取内容
.config 文件
System.Configuration API只在配置数据在应用程序的config文件中时才起作用,如MyApp.exe.config或者Web.config.因为System.Configuration API不支持载入config文件中configuration外的标记时使用log4net.Config.XmlConfigurator.ConfigureAndWatch方法,使用System.Configuration API最大的有点在于它相比直接读取需要较低的权限。
使用System.Configuration API进行配置的唯一方法是调用log4net.Config.XmlConfigurator.Configure() 方法或者 the log4net.Config.XmlConfigurator.Configure(ILoggerRepository) 方法.
为了能够把配置数据嵌入到.config文件中,节的名字必须在configSections元素中注册到.NET解释器,还必须指定log4net.Config.Log4NetConfigurationSectionHandler用来解释这一配置节。其中类型必须是完整的组件集名因为它被.NET config文件解释器读取而不是log4net。必须指定正确的log4net组件集名。下面的配置文件示范了正确的方式
1: <?xml version="1.0" encoding="utf-8" ?>
2: <configuration>
3: <configSections>
4: <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
5: </configSections>
6: <log4net>
7: <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" >
8: <layout type="log4net.Layout.PatternLayout">
9: <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" />
10: </layout>
11: </appender>
12: <root>
13: <level value="INFO" />
14: <appender-ref ref="ConsoleAppender" />
15: </root>
16: </log4net>
17: </configuration>
上面的理智中,指定了log4net组件集,他必须位于.NET运行时能够找到的地方,例如与程序相同的文件夹。如果log4net组件集位于GAC中,完整的组件集名还包括文化、版本和公钥。
当用.config文件来配置时,节名即XML元素名必须为log4net。
直接读取内容
XmlConfigurator能够直接读取XML文件并用它来配置log4net,包括.config文件如MyApp.exe.config或者Web.config。
不使用直接读取的唯一原因是应用程序的权限不能直接读取文件。因此必须使用NET configuration APIs
包含配置数据的文件可以通过任何接受System.IO.FileInfo对象的log4net.Config.XmlConfigurator方法指定。因为文件系统能够用于监测并通知文件的变化,所以ConfigureAndWatch 方法被用于监测配置文件并在未见改变时重载它配置log4net。
此外,log4net.Config.XmlConfiguratorAttribute可以用于指定配置文件。
配置从文件中的log4net节读取,文件中只能有一个log4net元素但是它可以位于XML中的任意等级,例如根元素
1: <?xml version="1.0" encoding="utf-8" ?>
2: <log4net>
3: <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" >
4: <layout type="log4net.Layout.PatternLayout">
5: <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" />
6: </layout>
7: </appender>
8: <root>
9: <level value="INFO" />
10: <appender-ref ref="ConsoleAppender" />
11: </root>
12: </log4net>
1: <?xml version="1.0" encoding="utf-8" ?>
2: <configuration>
3: <configSections>
4: <section name="log4net" type="System.Configuration.IgnoreSectionHandler" />
5: </configSections>
6: <log4net>
7: <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" >
8: <layout type="log4net.Layout.PatternLayout">
9: <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" />
10: </layout>
11: </appender>
12: <root>
13: <level value="INFO" />
14: <appender-ref ref="ConsoleAppender" />
15: </root>
16: </log4net>
17: </configuration>
上面的配置文件显示了怎么样把配置数据嵌入到.config文件中尽管文件能够被log4net直接读取。值得注意的是.NET config文件解释器如果发现没有在configSections元素注册的元素将会抛出一个异常。因此,上面的例子将log4net节注册,但是指定的处理类型为System.Configuration.IgnoreSectionHandler.这个内建的类表示已使用另外的方法来读取配置节。
1 COMMENTS:
Thanks
I went to your blog. it's also amazing one
Post a Comment