提及来log4net,我一直都知道这个的存在,但实际在项目中还真是没有去本身写过的那,这一次我在项目完成后并无着急下一个项目的开始,因而忽然想起来是否添加一个日志的编写,因而开始了log4net的总结,下面就简单的总结一下本身在添加log4net时间注意的。web
1.首先咱们在添加log4net以前须要添加其引用,这里就经过在web网站的引用添加其nuget包引用来添加,以下所示:安全
添加引用完成后,咱们打开web网站引用便可看到存在log4net,这就意味着咱们已经添加log4net引用成功。app
2.下面咱们就打开web网站的Properties文件夹下的AssemblyInfo.cs类文件,而后添加文件的配置:网站
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log.config", Watch = true)]
3.ConfigFile是指定log4net使用.config文件来读取配置信息,这里我新建立了一个config文件,专业用来配置log4net。也能够将其配置在web.config文件中,在log.config中,将其log4net文件配置在<configuration>节点中.spa
<?xml version="1.0" encoding="utf-8"?> <configuration> <system.web> <compilation debug="true" targetFramework="4.5" /> <httpRuntime targetFramework="4.5" /> </system.web> <log4net> <!--定义输出到文件中--> <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender"> <!--定义文件存放位置--> <file value="~logs/"/> <appendToFile value="true"/> <rollingStyle value="Date"/> <datePattern value="yyyy-MM-dd.txt"/> <staticLogFileName value="false"/> <layout type="log4net.Layout.PatternLayout"> <!--每条日志末尾的文字说明--> <footer value="" /> <!--value类型:"记录时间:%date 线程ID:[%thread] 日志级别:%-5level 出错类:%logger property:[%property{NDC}] - 错误描述:%message%newline"--> <conversionPattern value="%date ThreadID:[%thread] Log Level:%-5level Class:%logger Desp:%message%newline"/> </layout> </appender> <!--定义文件输出的名字以及文件的类型--> <appender name="ErrorLogFileAppender" type="log4net.Appender.RollingFileAppender"> <!--定义文件存放的位置--> <file type="log4net.Util.PatternString" value="..\log\%date{yyyyMMdd}\JOB_%property{jobid}_%date{yyyyMMdd}.log" /> <!--默认为true。当文件存在时,是否在原文件上追加内容,但是True/false,--> <appendToFile value="true" /> <!--默认为true。为true时,RollingStyler的date值将无效。且为true时,须要在file里指定文件名,全部日志都会记录在这个文件里,false时间是相反的--> <StaticLogFileName value="true"/> <!--文件锁类型,RollingFileAppender自己并非线程安全的,若是在程序中没有进行线程安全的限制,能够在这里进行配置,确保写入时的安全;文件锁定的模式有三个: FileAppender.ExclusiveLock, FileAppender.MinimalLock and FileAppender.InterProcessLock,默认是第一个值,排他锁定,一次值能有一个进程访问文件,关闭后 另一个进程才能够访问;第二个是最小锁定模式,容许多个进程能够同时写入一个文件;--> <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> <layout type="log4net.Layout.PatternLayout"> <!--value类型:"记录时间:%date 线程ID:[%thread] 日志级别:%-5level 出错类:%logger property:[%property{NDC}] - 错误描述:%message%newline"--> <conversionPattern value="%date{yyyy/MM/dd HH:mm:ss} %message%newline" /> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <levelMin value="INFO" /> <levelMax value="ERROR" /> </filter> </appender> <root> <!--控制级别,由低到高: ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF--> <!--若是定义级别为INFO,则INFO级别向下的级别,例如DEBUG日志将不会被记录--> <!--若是没有定义LEVEL的值,则缺省为DEBUG--> <level value="INFO" /> <appender-ref ref="ErrorLogFileAppender"/> </root> </log4net> </configuration>
针对filter我也是感受好奇,因而查找了一些资料,看到友友的总结,我仍是拿来用一下,但愿下次我在写log4net时间可以更快的寻找的到的啦,嘿嘿,下面就针对filter来总结一下,以下所示:线程
<!--log4net里面的filter类经常使用的为: 1、DenyAllFilter 拒绝所用的日志输出--> <filter type="log4net.Filter.LevelMatchFilter"> <param name="LevelToMatch" value="DEBUG" /> </filter> <filter type="log4net.Filter.DenyAllFilter" /> <!--上面的配置是若是日志的输出级别不符合DEBUG要求的话,则不输出任何日志。 2、LevelMatchFilter 这个类里面有两个属性,一个是LevelToMatch这个属性,是要匹配输出日志的级别,例如:--> <filter type="log4net.Filter.LevelMatchFilter"> <param name="LevelToMatch" value="DEBUG" /> </filter> <!--这样的话,只有级别是DEBUG的日志才能输出。 另外这个类还有一个重要的属性就是AcceptOnMatch这个属性是设置若是这个条件匹配的话,是否接受输出打印,好比说:--> <filter type="log4net.Filter.LevelMatchFilter"> <param name="LevelToMatch" value="DEBUG" /> </filter> <filter type="log4net.Filter.StringMatchFilter"> <param name="StringToMatch" value="debug" /> </filter> <!--若是日志的级别为DEBVG的话,也就是说符合了第一个Filter的条件,日志就输出,则StringMatchFilter就不执行了。若是这样写的话,就会继续向下执行过滤:--> <filter type="log4net.Filter.LevelMatchFilter"> <param name="LevelToMatch" value="DEBUG" /> <AcceptOnMatch value="false"></AcceptOnMatch> </filter> <filter type="log4net.Filter.StringMatchFilter"> <param name="StringToMatch" value="debug" /> </filter> <!--若是这样写的话,即便第一个Filter符合了条件则第二个Filter也会继续执行。 3、LevelRangeFilter 配置文件是这样的:--> <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="DEBUG" /> <param name="LevelMax" value="ERROR" /> </filter> <!--4、LoggerMatchFilter 配置文件是这样的:--> <filter type="log4net.Filter.LoggerMatchFilter"> <param name="LoggerToMatch" value="Client" /> </filter> <!--5、StringMatchFilter 配置文件是这样的:--> <filter type="log4net.Filter.StringMatchFilter"> <param name="StringToMatch" value="/blog/Client.Program" /> </filter>
4.日志的配置文件已经写好,下面咱们就去Global.asax文件中进行配置,以下所示:debug
ILog log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
在Global.asax文件Application_Start方法下添加I上面的代码块便可。日志
5.咱们在容易出错的类中添加咱们的报错信息,例如简单的报错ex错误,以下:code
try { } catch (System.Exception ex) { LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType).Error(ex.Message); }
好啦,这样咱们在出错时间就会建立log日志,而后告诉咱们问题在哪里,嘿嘿,就总结到这里啦,加油亲们!xml