转载

Log4net

简单明了:分6步来使用log4net组件

1,项目添加引用log4net.dll,只引用这个dll就ok

2,using Log4net命名空间

3,检查项目属性框架是否和引入的log4net.dll的版本一致。

否则会包未能加载程序集的错误。一般我们用FRAMEWORK4.0,而非4.0profile。

4,配置文件

不论哪种项目都可以加config文件,配置文件分4块。

4.1在configuration节点内,2种方式

Log4net
1   <configSections> 2     <section name="log4net" type="System.Configuration.IgnoreSectionHandler"> 3     </section> 4     <!--<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net">第二种方式-->
配置文件第一步

4.2在configuration节点定义log4net,log4net节点内定义appender,每个appender,日志对应一种输出方式。

输出到文本

输出到数据库

输出到控制台

当然还有其他输出位置,但是没有用到,先列出来。

Log4net
 1 具体说来有如下Appender:  2 AdoNetAppender:利用ADO.NET记录到数据库的日志。  3 AnsiColorTerminalAppender:在ANSI 窗口终端写下高亮度的日志事件。  4 AspNetTraceAppender:能用asp.net中Trace的方式查看记录的日志。  5 BufferingForwardingAppender:在输出到子Appenders之前先缓存日志事件。  6 ConsoleAppender:将日志输出到控制台。  7 EventLogAppender:将日志写到Windows Event Log.  8 FileAppender:将日志写到文件中。  9 LocalSyslogAppender:将日志写到local syslog service (仅用于UNIX环境下). 10 MemoryAppender:将日志存到内存缓冲区。 11 NetSendAppender:将日志输出到Windows Messenger service.这些日志信息将在用户终端的对话框中显示。 12 RemoteSyslogAppender:通过UDP网络协议将日志写到Remote syslog service。 13 RemotingAppender:通过.NET Remoting将日志写到远程接收端。 14 RollingFileAppender:将日志以回滚文件的形式写到文件中。 15 SmtpAppender:将日志写到邮件中。 16 TraceAppender:将日志写到.NET trace 系统。 17 UdpAppender:将日志connectionless UDP datagrams的形式送到远程宿主或以UdpClient的形式广播。
日志输出方式
Log4net
<!--定义输出到文件中--> <appender name="LogFileAppender" type="log4net.Appender.FileAppender">   <!--定义文件存放位置-->   <file value="D:/log4netfile.txt"/>   <appendToFile value="true"/>   <rollingStyle value="Date"/>   <datePattern value="yyyyMMdd-HH:mm:ss"/>   <layout type="log4net.Layout.PatternLayout">     <!--每条日志末尾的文字说明-->     <footer value="by 周公"/>     <!--输出格式-->     <!--样例:2008-03-26 13:42:32,111 [10] INFO  Log4NetDemo.MainClass [(null)] - info-->     <conversionPattern value="记录时间:%date 线程ID:[%thread] 日志级别:%-5level 出错类:%logger property:[%property{NDC}] - 错误描述:%message%newline"/>   </layout> </appender> <!--定义输出到控制台命令行中--> <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">   <layout type="log4net.Layout.PatternLayout">     <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"/>   </layout> </appender> <!--定义输出到数据库中,这里举例输出到Access数据库中,数据库为C盘的log4net.mdb--> <appender name="AdoNetAppender_Access" type="log4net.Appender.AdoNetAppender">   <connectionString value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:log4net.mdb"/>   <commandText value="INSERT INTO LogDetails ([LogDate],[Thread],[Level],[Logger],[Message]) VALUES (@logDate, @thread, @logLevel, @logger,@message)"/>   <!--定义各个参数-->   <parameter>     <parameterName value="@logDate"/>     <dbType value="String"/>     <size value="240"/>     <layout type="log4net.Layout.PatternLayout">       <conversionPattern value="%date"/>     </layout>   </parameter>   <parameter>     <parameterName value="@thread"/>     <dbType value="String"/>     <size value="240"/>     <layout type="log4net.Layout.PatternLayout">       <conversionPattern value="%thread"/>     </layout>   </parameter>   <parameter>     <parameterName value="@logLevel"/>     <dbType value="String"/>     <size value="240"/>     <layout type="log4net.Layout.PatternLayout">       <conversionPattern value="%level"/>     </layout>   </parameter>   <parameter>     <parameterName value="@logger"/>     <dbType value="String"/>     <size value="240"/>     <layout type="log4net.Layout.PatternLayout">       <conversionPattern value="%logger"/>     </layout>   </parameter>   <parameter>     <parameterName value="@message"/>     <dbType value="String"/>     <size value="240"/>     <layout type="log4net.Layout.PatternLayout">       <conversionPattern value="%message"/>     </layout>   </parameter> </appender> 
输出方式appender,其他输出方式自己理解后,自己很容易就能查找

4.3在log4net节点定义root,在root节点下,每appender对应一个appender-ref,想同时多种方式记录日志,就写多个appender-ref,当然还要 对应appender

Log4net
 1     <root>  2       <!--文件形式记录日志-->  3       <appender-ref ref="LogFileAppender"/>  4       <!--控制台控制显示日志-->  5       <appender-ref ref="ConsoleAppender"/>  6       <!--Windows事件日志-->  7       <appender-ref ref="EventLogAppender"/>  8       <!-- 如果不启用相应的日志记录,可以通过这种方式注释掉  9       <appender-ref ref="AdoNetAppender_Access" /> 10       --> 11     </root>
log4net节点下root节点下appender-ref

4.4 在log4net节点外,</configuration>节点内定义startup节点。

Log4net
1 <startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup>
startup

5,开始监视。

举2种:控制台和web。控制台需要加标签,WEB在global文件中app_start内加。都表示一开始运行程序就开始运行log4net记录

5.1控制台监视,在主函数命名空间前面加标签。2种标签

Log4net
1 [assembly: log4net.Config.XmlConfigurator(ConfigFileExtension = "config", Watch = true)] 2 //[assembly: log4net.Config.XmlConfigurator(Watch = true)]   与上面一样
控制台的2种标签

5.2 WEB

Log4net
1   void Application_Start(object sender, EventArgs e) 2         { 3             // 在应用程序启动时运行的代码    4            log4net.Config.XmlConfigurator.Configure();             5         }
global

6,程序运行时

通过反射,获取Ilog实例,点出其方法,debug info error warn fatal,一般只用一个方法就可以了,用哪个方法,日志会对应配置文件中的appender的layout节点中的%level现实对应的信息等级。

个人认为:哪里出的异常非常严重就用fatal  觉得是错误用error  一般我们用info就行。

Log4net
ILog log = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);//通过反射方式     ILog log = log4net.LogManager.GetLogger(typeof(当前类名));//通过反射方式
log实例

记录:

Log4net
1  log.Error("error", new Exception("错误")); 2             //记录严重错误 3             log.Fatal("fatal", new Exception("致命错误")); 4             //记录一般信息 5             log.Info("info", new Exception("信息")); 6             //记录调试信息 7             log.Debug("debug", new Exception("调试信息")); 8             //记录警告 9             log.Warn("warn", new Exception("警告"));
5个等级

一般在WEB中,我们为了方便使用,监视开始后,不用在每个类(页面)中获取Ilog对象,在写记录。

我们一般写个Log4netHelper类,做好这两个功能(1获取实例,静态封装等级方法),在页面直接调用封装好的静态方法。

Log4net
1  public class LogHelper 2     { 3         private LogHelper() { } 4  5         public static readonly log4net.ILog loginfo = log4net.LogManager.GetLogger("loginfo"); //此处没有获取type of 当前类    public static void WriteLog(string info) 6         { 7             loginfo.Info(info); 8         } 9      }
Log4netHelper
Log4net
1   public class Log4netHelper 2     { 3        public static void WriteLog(Type type, string ex) 4         { 5         log4net.ILog log = log4net.LogManager.GetLogger(type); 6            log.info(ex); 7          } 8     }
Log4netHelper

①这里多多赘述一下

常用写入文本中的2种方式。appender中的节点配置。

1,按日期生成文本

Log4net
1 <param name="File" value="Logs//LogInfo//" /> 2       <param name="AppendToFile" value="true" /> 3       <!--param name="MaxFileSize" value="50MB" /--> 4       <param name="MaxSizeRollBackups" value="100" /> 5       <param name="StaticLogFileName" value="false" /> 6       <param name="DatePattern" value="yyyyMMdd" /> 7       <param name="RollingStyle" value="Date" /> 8       <param name="lockingModel"  type="log4net.Appender.FileAppender+MinimalLock" />
日期生成文本 appender参数

工作项目的截图

Log4net

2,按文本大小,个数生成

Log4net
<file value=""/> <appenderToFile value="true"/> <maxSizeRollBackups value="10">   最多生成10个文件 <maximumFileSize value="1024KB"/> 每个文件最大1M <rollingStyle value="Size"/> 按文件大小 <staticLogFileName value="true"/> 文件名不变
按文件大小生成个数

当第一个file.txt够1M时,会自动生成file1.txt,将file.txt文件内容剪切到file1.txt中,这样file.txt文件空了,会继续记录。够1M时,会自动生成file2.txt,剪切到file2.txt中,还是在file.txt中记录。

②有关appender中的layout的参数意义

Log4net
 1 关于使用log4net中可能会使用到的一些参数  2 %m(message):输出的日志消息,如ILog.Debug(…)输出的一条消息  3 %n(new line):换行  4 %d(datetime):输出当前语句运行的时刻  5 %r(run time):输出程序从运行到执行到当前语句时消耗的毫秒数  6 %t(thread id):当前语句所在的线程ID  7 %p(priority): 日志的当前优先级别,即DEBUG、INFO、WARN…等  8 %c(class):当前日志对象的名称,例如:  9 %f(file):输出语句所在的文件名。 10 %l(line):输出语句所在的行号。 11 %数字:表示该项的最小长度,如果不够,则用空格填充,如“%-5level”表示level的最小宽度是5个字符,如果实际长度不够5个字符则以空格填充。 12 下面以一个实际的例子来说明问题,比如在配置中有“%date [%thread] (%file:%line) %-5level %logger [%property{NDC}] - %message%newline”,那么实际的日志中会是如下格式: 13 “记录时间:2010-11-17 16:16:36,561 线程ID:[9] 日志级别:文件:所在行ERROR 出错类:Log4NetDemo.Program property:[(null)] - 错误描述:error 14 System.Exception: 在这里发生了一个异常,Error Number:2036084948
appender中的layout参数意义

③借鉴文章

http://logging.apache.org/log4net/release/manual/configuration.html  log4net官网

http://www.cnblogs.com/dragon/archive/2005/03/24/124254.html周金桥

http://zhoufoxcn.blog.51cto.com/792419/429988/   周金桥

http://www.cnblogs.com/wangsaiming/archive/2013/01/11/2856253.html  柄棋先生

正文到此结束
Loading...