(一)log4net的标准配置文档示例
<?xmlversion="1.0"encoding="utf-8" ?>
<configuration>
<configSections>
<sectionname="log4net"
type="log4net.Config.Log4NetConfigurationSectionHandler" />
</configSections>
<log4net>
<root>
<levelvalue="WARN" />
<appender-refref="LogFileAppender" />
<appender-refref="ConsoleAppender" />
</root>
<loggername="testApp.Logging">
<levelvalue="DEBUG"/>
</logger>
<appendername="LogFileAppender" type="log4net.Appender.FileAppender" >
<paramname="File"value="log-file.txt" />
<paramname="AppendToFile"value="true" />
<layouttype="log4net.Layout.PatternLayout">
<paramname="Header"value="[Header] "/>
<paramname="Footer"value="[Footer] "/>
<paramname="ConversionPattern" value="%d [%t] %-5p %c[%x] - %m%n" />
</layout>
<filtertype="log4net.Filter.LevelRangeFilter">
<paramname="LevelMin"value="DEBUG" />
<paramname="LevelMax"value="WARN" />
</filter>
</appender>
<appendername="ConsoleAppender" type="log4net.Appender.ConsoleAppender" >
<layouttype="log4net.Layout.PatternLayout">
<paramname="ConversionPattern" value="%d [%t] %-5p %c [%x] -%m%n" />
</layout>
</appender>
</log4net>
</configuration>
(二)log4net配置文件与程序的关联
log4net的配置可以放在应用程序的默认配置文件中(app.config或web.config),也可以在自己指定的配置文件中。log4net框架中是使用log4net.Config.XmlConfigurator在程序集的级别上定义配置文件。
(1)winform程序中,如果配置在app.config文件中,配置文件的结构如示例。这时找到当前项目的Assemblyinfo.cs文件添加
[assembly:log4net.Config.XmlConfigurator(ConfigFileExtension = "config", Watch= true)] app.config文件属性设置保持默认。
(2)winform程序中,如果配置在自定义文件中如“Config.txt”中。这时找到当前项目的Assemblyinfo.cs文件添加
[assembly:log4net.Config.XmlConfigurator(ConfigFile="config.txt", Watch =true)] Config.txt文件的属性要设置为复制。就是要输出到输出目录。
这个时候配置可以省略示例模版中<configSection>节点里的<section>节点。
ConfigFile:指出了我们的配置文件的路径及文件名,包括扩展名。
ConfigFileExtension:如果我们对被编译程序的程序集使用了不同的文件扩展名,那么我们需要定义这个属性,缺省的,程序集的配置文件扩展名为”config”。
Watch (Boolean属性): log4net框架用这个属性来确定是否需要在运行时监视文件的改变。如果这个属性为true,那么FileSystemWatcher将会被用来监视文件的改变,重命名,删除等事件。
其中:ConfigFile和ConfigFileExtension属性不能同时使用,ConfigFile指出了配置文件的名字,例如,ConfigFile=”Config.txt”
ConfigFileExtension则是指明了和可执行程序集同名的配置文件的扩展名,例如,应用程序的名称是”test.exe”,ConfigFileExtension=”txt”,则配置文件就应该是”test.exe.txt”;
也可以在程序代码中用DOMConfigurator类打开配置文件。类的构造函数需要一个FileInfo对象作参数,以指出要打开的配置文件名。这个方法和前面在程序集里设置属性打开一个配置文件的效果是一样的。
log4net.Config.DOMConfigurator.Configure(newFileInfo("TestLogger.Exe.Config"));
DOMConfigurator类还有一个方法ConfigureAndWatch(..),用来配置框架并检测文件的变化。
(二)节点分析
在配置章节中,定义section节点。节点名称为:须为log4net,且大小写敏感。
<configSections>
<sectionname="log4net"
type="log4net.Config.Log4NetConfigurationSectionHandler" />
</configSections>
(三)log4net节点说明
(1)节点支持的属性,debug,update,threshold三个属性
debug 可选,取值是true或false,默认是false。设置为true,开启log4net的内部调试。
update可选,取值是Merge(合并)或Overwrite(覆盖),默认值是Merge。设置为Overwrite,在提交配置的时候会重置已经配置过的库。
threshold可选,取值是repository(库)中注册的level,默认值是ALL。
(2)支持子元素
appender 0或多个
logger 0或多个
renderer 0或多个
root 最多一个
param 0或多个
(四)root节点说明
(1)根logger,所有其它logger都默认继承它。root元素没有属性。
(2)支持的子元素
appender-ref 0个或多个,要引用的appender的名字。
· level 最多一个。只有在这个级别或之上的事件才会被记录。
· param 0个或多个,设置一些参数。
<root>
<levelvalue="WARN" />
<appender-refref="LogFileAppender" />
<appender-refref="ConsoleAppender" />
</root>
(五)Logger节点说明
(1)支持的属性name,Additivity两个属性
name必须的,logger的名称
additivity 可选,取值是true或false,默认值是true。设置为false时将阻止父logger中的appender。
(2)支持的子元素:
appender-ref 0个或多个,要引用的appender的名字。
·level最多一个。只有在这个级别或之上的事件才会被记录。
·param 0个或多个,设置一些参数。
例如:<loggername="testApp.Logging">
<levelvalue="DEBUG"/>
</logger>
(六)Appender节点说明
(1)定义日志的输出方式,只能作为 log4net 的子元素。name属性必须唯一,type属性必须指定。支持name,type两个属性。
name 必须的,Appender对象的名称
type 必须的,Appender对象的输出类型
(2)支持的子元素:
· appender-ref 0个或多个,允许此appender引用其他appender,并不是所以appender类型都支持。
·filter 0个或多个,定义此app使用的过滤器。
·layout 最多一个。定义appender使用的输出格式。
· param 0个或多个,设置Appender类中对应的属性的值。
例如: LogFileAppender 节点日志文件输出。type="log4net.Appender.FileAppender"
ConsoleAppender节点控制台输出。type="log4net.Appender.ConsoleAppender"
(七)Filter节点说明
过滤器,只能作为<appender>的子元素。
支持的属性:
type 必须的,Filter的类型
支持的子元素:param 0个或多个,设置一些参数。
(八)Layout节点说明
布局,只能作为<appender>的子元素。
支持的属性:
type 必须的,Layout的类型
支持的子元素:param 0个或多个,设置一些参数。
(九)Param
<param>元素可以是如何元素的子元素。
支持的属性:
name 必须的,取值是父对象的参数名。
value 可选的,value和type中,必须有一个属性被指定。value是一个能被转化为参数值的字符串。
type 可选的,value和type中,必须有一个属性被指定。type是一个类型名,如果type不是在log4net程序集中定义的,就需要使用全名。
支持的子元素:param 0个或多个,设置一些参数。
(十)Log4net xsd
好多刚开始接触.Net不久的人一定会问.xsd文件是干嘛的?通俗点说这东西就是用来制定目标xm文档规则的,它是解释性的。大家一定有这个经验就是当你在App.config文件中写配置文件时会自动出现智能提示,而且在书写不规范或错误时还会出现警告。在后台其作用的就是对应的.xsd文件。好了不聊这个了,为了让我们在编辑log4Net配置文件时,也能有对应的提示和纠错功能。下面是我找到的log4net.xsd文件(郁闷,好像不能直接上传。哎)
使用方法是,把这个文件拷贝到D:\Program Files\Microsoft Visual Studio 8\Xml\Schemas目录下(根据你vs的安装目录修改地址),在配置log4net结点时,加上xmlns="urn:log4net"的命名空间。就可以获得智能提示和正确的错误提醒。
<log4net xmlns="urn:log4net">
在后续中,我将提供log4net输出到不同媒介的具体示例。