1、添加对log4net.dll的引用web
2、定义配置文件session
好处:app
配置信息放置位置:框架
log4net框架会在相对于AppDomain.CurrentDomain.BaseDirectory 属性定义的目录路径下查找配置文件。框架在配置文件里要查找的惟一标识是<log4net>标签。函数
<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/> </configSections> <log4net> <root> <level value="WARN" /> <appender-ref ref="LogFileAppender" /> <appender-ref ref="ConsoleAppender" /> </root> <logger name="testApp.Logging"> <level value="DEBUG"/> </logger> <appender name="LogFileAppender" type="log4net.Appender.FileAppender" > <param name="File" value="log-file.txt" /> <param name="AppendToFile" value="true" /> <layout type="log4net.Layout.PatternLayout"> <param name="Header" value="[Header]\r\n"/> <param name="Footer" value="[Footer]\r\n"/> <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="DEBUG" /> <param name="LevelMax" value="WARN" /> </filter> </appender> <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" > <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/> </layout> </appender> </log4net> </configuration>
2.1 <root>性能
<root> <level value="WARN" /> <appender-ref ref="LogFileAppender" /> <appender-ref ref="ConsoleAppender" /> </root>
在框架的体系里,全部的日志对象都是根日志(root logger)的后代。 所以若是一个日志对象没有在配置文件里显式定义,则框架使用根日志中定义的属性。spa
<root>标签里,能够定义level级别值和Appender的列表。若是没有定义LEVEL的值,则缺省为DEBUG。线程
<appender-ref>标签订义日志对象使用的Appender对象。<appender-ref>声明了在其余地方定义的Appender对象的一个引用。日志
在一个logger对象中的设置会覆盖根日志的设置。而对Appender属性来讲,子日志对象则会继承父日志对象的Appender列表。这种缺省的行为方式也能够经过显式地设定<logger>标签的additivity属性为false而改变。code
<logger name="testApp.Logging" additivity="false"> </logger>
2.2 <logger>
<logger name="testApp.Logging"> <level value="DEBUG"/> </logger>
<logger> 元素预约义了一个具体日志对象的设置。而后经过调用LogManager.GetLogger(“testAPP.Logging”)函数,你能够检索具备该名字的日志。若是LogManager.GetLogger(…)打开的不是预约义的日志对象,则该日志对象会继承根日志对象的属性。其实<logger>标签并非必须的。
2.3 <appender>
在<root>标签或单个的<logger>标签里的Appender对象能够用<appender>标签订义。<appender>标签,它定义了appender的名字和类型。 另外比较重要的是<appender>标签内部的其余标签。
不一样的appender有不一样的<param>标签。
在这里,为了使用FileAppender,你须要一个文件名做为参数。另外还须要一个在<appender>标签内部定义一个Layout对象。Layout对象定义在它本身的<layout>标签内。<layout>标签的type属性定义了Layout的类型(在本例里是PatternLayout),同时也肯定了须要提供的参数值。Header和Footer标签提供了一个日志会话(logging session)开始和结束时输出的文字。
2.4 log4net.Layout.PatternLayout中的转换模式(ConversionPattern)
2.5 <filter>
它定义了应用到Appender对象的过滤器。本例中,咱们使用了LevelRangeFilter过滤器,它能够只记录LevelMin和LevelMax参数指定的日志级别之间的日志事件。能够在一个Appender上定义多个过滤器(Filter),这些过滤器将会按照它们定义的顺序对日志事件进行过滤。其余过滤器的有关信息能够在log4net的SDK文档中找到。
3、关联配置文件
3.1 在程序集的级别上定义配置文件
例如:能够在项目的AssemblyInfo.cs文件里添加如下的语句
[assembly:log4net.Config.XmlConfigurator(ConfigFile="filename",ConfigFileExtension="ext",Watch=true/false)]
其中:ConfigFile和ConfigFileExtension属性不能同时使用,ConfigFile指出了配置文件的名字,例如,ConfigFile=”Config.txt”
ConfigFileExtension则是指明了和可执行程序集同名的配置文件的扩展名,例如,应用程序的名称是”test.exe”,ConfigFileExtension=”txt”,则配置文件就应该是”test.exe.txt” ;
也能够不带参数应用XmlConfigurator():
[assembly: log4net.Config.XmlConfigurator()]
3.2 在程序代码中打开配置文件
类的构造函数须要一个FileInfo对象做参数,以指出要打开的配置文件名。 这个方法和前面在程序集里设置属性打开一个配置文件的效果是同样的。
log4net.Config.XmlConfigurator.Configure(new FileInfo("TestLogger.Exe.Config"));
XmlConfigurator 类还有一个方法ConfigureAndWatch(..), 用来配置框架并检测文件的变化。
4、建立或获取日志对象
日志对象会使用在配置文件里定义的属性。若是某个日志对象没有事先在配置文件里定义,那么框架会根据继承结构获取祖先节点的属性,最终的,会从根日志获取属性。以下所示:
Log4net.ILog log = Log4net.LogManager.GetLogger("MyLogger");
5、输入日志信息
可使用ILog的几种方法输出日志信息。你也能够在调用某方法前先检查IsXXXEnabled布尔变量,再决定是否调用输出日志信息的函数,这样能够提升程序的性能。由于框架在调用如ILog.Debug(…)这样的函数时,也会先判断是否知足Level日志级别条件。
if (log.IsDebugEnabled) log.Debug("message");
if (log.IsInfoEnabled) log.Info("message);