【改进】用Log4net建立日志记录

来源:互联网 时间:2015-12-08

上一篇随笔中只使用了普通的文件读写来进行日志的写入,正如很多朋友说的,频繁的对文件进行读写会造成很多的问题,代码缺少边界控制和操作控制,没有对资源进行管理,是非常典型的bad code。

然后经过前辈们的提点,今天使用了Log4net进行日志的写入,发现非常的便捷,同时也集成了对于日志的控制,减少因为日志写入而发生的一系列不该有的错误。

 

网上也有很多教程,在此,结合我的教训,我也厚颜无耻的贴出自己的实现步骤,欢迎前辈们指正!!!

 

app.config配置文件,我是直接写在系统的app.config文件里面的,新建一个config配置文件会无法识别,也不知道为什么,求前辈指教

 

<?xml version="1.0" encoding="utf-8"?><configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> </configSections> <log4net> <root> <level value="INFO"/> <!--文件形式记录日志--> <appender-ref ref="RollingLogFileAppender"/> </root> <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> <!--日志位置--> <file value="Log//" /> <!--日志名称--> <datePattern value="yyyy-MM-dd'.txt'"/> <!--最小线程锁--> <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/> <!-- 追加到文件--> <appendToFile value="true"/> <!-- 滑动记录日志--> <RollingStyle value="Date"/> <!--非固定的日志名称--> <staticLogFileName value="false"/> <!--备份日志数目 --> <param name="MaxSizeRollBackups" value="100"/> <!--日志格式--> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="记录时间:【%date】 [%t]%-5p %n - %m%n"/> </layout> </appender> </log4net> <!--程序自带启动配置文件--> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/> </startup></configuration>

以上配置每天会新建一个日志文件,我觉得这样子会方便管理,也方便查看。

 

接下来,我们新建一个记录日志的公共类,来供其他操作使用我们的日志记录。

using System;using System.Reflection;using log4net;using log4net.Config;[assembly: XmlConfigurator(Watch = true)]namespace DataBindingDemo.Helper{ public static class LogHelper { /// <summary> /// 记录错误日志 /// </summary> /// <param name="ex"></param> public static void LogError(Exception ex) { var type = MethodBase.GetCurrentMethod().DeclaringType; var log = LogManager.GetLogger(type); log.Error(ex); } /// <summary> /// 记录普通日志 /// </summary> /// <param name="info"></param> public static void LogInfo(string info) { var type = MethodBase.GetCurrentMethod().DeclaringType; var log = LogManager.GetLogger(type); log.Info(info); } }}

在这里,我只使用了两种日志的记录格式。

有需要的同学可以根据自己的需要进行调整。

问题:在 LogManager.GetLogger(type); 中的type不能为null,可是通过反射去获取方法类型我只会反射到上一层,不会反射到调用方法的层。也就是说这里type几乎没什么用。网上初略找了找也没有找到对应的详细解释。求前辈指点。

 

使用方法

LogHelper.LogInfo("记录第一个日志");

这样就能记录下我们需要的日志了。

 

疑问:通过配置只能把各种Log记录在一个文件夹下面,如果我想把日志分类,不同的log和关键log,错误log,记录在不同的文件夹中,在Log4net中想不到怎么去实现,求前辈再指点!

跪谢!

 

【解决分类保存Log的方法】

经过前辈的提醒,通过设置多个appender来分级写入日志,同时也要用到log4net的filter过滤器来过滤不同等级的日志

<?xml version="1.0" encoding="utf-8"?><configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> </configSections> <log4net> <root> <level value="ALL"/> <!--文件形式记录日志--> <appender-ref ref="RollingFileAppenderLogInfo"/> <appender-ref ref="RollingFileAppenderLogError"/> </root> <appender name="RollingFileAppenderLogInfo" type="log4net.Appender.RollingFileAppender"> <!--日志位置--> <file value="Log//" /> <!--日志名称--> <datePattern value="yyyy-MM-dd'.txt'"/> <!--最小线程锁--> <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/> <!-- 追加到文件--> <appendToFile value="true"/> <!-- 滑动记录日志--> <RollingStyle value="Date"/> <!--非固定的日志名称--> <staticLogFileName value="false"/> <!--备份日志数目 --> <param name="MaxSizeRollBackups" value="100"/> <!--日志格式--> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="记录时间:【%date】 [%t]%-5p %n - %m%n"/> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <levelMin value="DEBUG" /> <levelMax value="INFO" /> </filter> </appender> <appender name="RollingFileAppenderLogError" type="log4net.Appender.RollingFileAppender"> <!--日志位置--> <file value="LogError//" /> <!--日志名称--> <datePattern value="yyyy-MM-dd'.txt'"/> <!--最小线程锁--> <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/> <!-- 追加到文件--> <appendToFile value="true"/> <!-- 滑动记录日志--> <RollingStyle value="Date"/> <!--非固定的日志名称--> <staticLogFileName value="false"/> <!--备份日志数目 --> <param name="MaxSizeRollBackups" value="100"/> <!--日志格式--> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="记录时间:【%date】 [%t]%-5p %n - %m%n"/> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <levelMin value="ERROR" /> <levelMax value="FATAL" /> </filter> </appender> </log4net> <!--程序自带启动配置文件--> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/> </startup></configuration>

在filter中,我们过滤了相应等级的日志,分别在不同appender中写入不同的文件夹,这样,管理日志和错误就更加的简便和快捷了。

相关阅读:
Top