log4net的作用

提供一个记录日志的框架,可以将日志信息记录到文件(txt、xml等)、控制台、Windows事件日志和数据库(MSSQL、Acess、Oracle、DB2和SQLite等)。

要想使用log4net,我把它分为三步:

    第一:在项目中引用log4net组件
      第二:配置log4net,一般都写在web.config中(BS) app.config(CS)
      第三:调用部分

说明:关于第二步,根据经验配置文件一般不写在app.config 或 web.config中

理由: 一个项目随着需求的变更,配置字节会特别多,不便查阅及维护而且一但更改配置文件,就会引起IIS重启(BS)
解决方案:我们可以利用以下方法来实现:

  1. log4net.Config.XmlConfigurator.ConfigureAndWatch(FileInfo fileInfo);

它用来加载配置文件,这个配置文件可以放在任意地方,与项目其他程序完成分离。

  1. 而且通过这种方式,不用在AssemblyInfo.cs文件中添加 [assembly: log4net.Config.XmlConfigurator()]

一、引用log4net组件

http://logging.apache.org/log4net/download_log4net.cgi下载最新的压缩包log4net-2.0.8-bin-newkey.zip

解压后将获得的log4net.dll文件,添加到工程的引用(我用的net 4.0版本)

如果添加命名空间 using log4net; 时提示   未能找到类型或命名空间名称"log4net"(是否缺少using指令或程序集引用?)

vs选择 项目-属性-应用程序下的“目标框架” 选择.NET Framework 4   (.NET Framework 4 Client Profile不行)
 
二、配置log4net
先放一个标准的log4net配置,文件名 log4net.config
  1. <?xml version="1.0"?>
  2. <configuration>
  3.  
  4. <configSections>
  5. <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net-2.0.8"/>
  6. </configSections>
  7.  
  8. <log4net>
  9. <logger name="logerror">
  10. <level value="ALL" />
  11. <appender-ref ref="ErrorAppender" />
  12. </logger>
  13.  
  14. <logger name="loginfo">
  15. <level value="ALL" />
  16. <appender-ref ref="InfoAppender" />
  17. </logger>
  18.  
  19. <appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender">
  20. <param name="File" value="Log\\LogError\\" />
  21. <param name="AppendToFile" value="true" />
  22. <param name="MaxSizeRollBackups" value="100" />
  23. <param name="MaxFileSize" value="10240" />
  24. <param name="StaticLogFileName" value="false" />
  25. <param name="DatePattern" value="yyyyMMdd&quot;.htm&quot;" />
  26. <param name="RollingStyle" value="Date" />
  27.  
  28. <layout type="log4net.Layout.PatternLayout">
  29. <param name="ConversionPattern" value="&lt;HR COLOR=red&gt;%n异常时间:%d [%t] &lt;BR&gt;%n异常级别:%-5p &lt;BR&gt;%n异 常 类:%c [%x] &lt;BR&gt;%n%m &lt;BR&gt;%n &lt;HR Size=1&gt;" />
  30. </layout>
  31.  
  32. </appender>
  33.  
  34. <appender name="InfoAppender" type="log4net.Appender.RollingFileAppender">
  35. <param name="File" value="Log\\LogInfo\\" />
  36. <param name="AppendToFile" value="true" />
  37. <param name="MaxFileSize" value="10240" />
  38. <param name="MaxSizeRollBackups" value="100" />
  39. <param name="StaticLogFileName" value="false" />
  40. <param name="DatePattern" value="yyyyMMdd&quot;.htm&quot;" />
  41. <param name="RollingStyle" value="Date" />
  42.  
  43. <layout type="log4net.Layout.PatternLayout">
  44. <param name="ConversionPattern" value="&lt;HR COLOR=blue&gt;%n日志时间:%d [%t] &lt;BR&gt;%n日志级别:%-5p &lt;BR&gt;%n日 志 类:%c [%x] &lt;BR&gt;%n%m &lt;BR&gt;%n &lt;HR Size=1&gt;" />
  45. </layout>
  46.  
  47. </appender>
  48. </log4net>
  49. </configuration>

三、调用

1.在AssemblyInfo.cs文件中增加一行代码

  1. [assembly: log4net.Config.XmlConfigurator( ConfigFile="log4net.config", ConfigFileExtension = "config", Watch = true)]

或在程序中添加如下代码

  1. FileInfo fileInfo = new FileInfo("log4net.config");
  2. log4net.Config.XmlConfigurator.ConfigureAndWatch(fileInfo);

2.在主程序添加如下代码

  1. log4net.ILog loginfo = log4net.LogManager.GetLogger("loginfo");
  2. loginfo.Info(string.Format("当前的时间{0}", DateTime.Now));
  3.  
  4. log4net.ILog logerror = log4net.LogManager.GetLogger("logerror");
  5. loginfo.Info(string.Format("当前的时间{0}", DateTime.Now));

运行后会在bin\Release\Log\LogInfo 下生成 年月日.htm文件,显示如下

说明:

1、.confg文件必须和可执行文件在同一目录,如放在bin\Release目录下

如果不在同一目录,可以在解决方案资源管理器中的log4net.config文件上右键,选择属性,复制到输出目录,如果较新则复制

2.配置文件中节点的解释

logger是负责日志的记录者,假设我们需要记录一些正常的运行时日志和出现异常时的错误日志,那么我们可以通过在配置文件当中添加两个Logger实现。 
appender提供记录的介质,前面谈到,我们可能要同时将数据记录到文件和数据库中,我们可以简单地通过编写appender实现,而且Log4Net当中已经默认提供了一些常用的appender,我们可以简单地修改一些配置文件就实现同时向数据库和同时向文件中写入的功能。

layout负责把记入的内容格式化。其实就是决定日志文件要长什么样子。

Logger节点的解释

错误日志类为例进行解释

  1. <!-- 错误日志类-->
  2. <logger name="logerror"> <!-- 日志类的名字-->
  3. <level value="ALL" /> <!-- 定义记录的日志级别-->
  4. <appender-ref ref="ErrorAppender" /><!-- 记录到什么介质中-->
  5. </logger>

level定义记录的日志级别,就是说,你要记录哪个级别以上的日志,级别由高往低依次是:

None
Fatal
ERROR
WARN
DEBUG
INFO
ALL

级别的定义要注意,如果你定义DEBUG,那么低于DEBUG级别以下的信息,将不会记入日志,啥意思呢?就是说,就算你在程序里,用log.info()来写入一个日志信息,可是你在配置中指定level为DEBUG,由于INFO级别低于DEBUG,所以,不会被记入日志.这样的处理非常灵活

appender-ref定义日志要写入到什么介质中中。上面例子中就是写入到ErrorAppender这个介质中,在ErrorAppender节点我们可以定义跟日志有关的要写入到什么地方,日志文件的格式是什么等信息。

appender节点的解释

ErrorAppender为例

  1. <!-- 错误日志附加介质-->
  2. <appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender"> <!-- name属性指定其名称,type则是log4net.Appender命名空间的一个类的名称,意思是,指定使用哪种介质-->
  3. <param name="File" value="Log\\LogError\\" /> <!-- 输出到什么目录-->
  4. <param name="AppendToFile" value="true" /><!-- 是否覆写到文件中-->
  5. <param name="MaxSizeRollBackups" value="100" /><!-- 备份文件的个数-->
  6. <param name="MaxFileSize" value="10MB" /><!-- 单个日志文件最大的大小-->
  7. <param name="StaticLogFileName" value="false" /><!-- 是否使用静态文件名-->
  8. <param name="DatePattern" value="yyyyMMdd&quot;.htm&quot;" /><!-- 日志文件名-->
  9. <param name="RollingStyle" value="Date" />
  10. <!--布局-->
  11. <layout type="log4net.Layout.PatternLayout">
  12. <param name="ConversionPattern" value="&lt;HR COLOR=red&gt;%n异常时间:%d [%t] &lt;BR&gt;%n异常级别:%-5p &lt;BR&gt;%n异 常 类:%c [%x] &lt;BR&gt;%n%m &lt;BR&gt;%n &lt;HR Size=1&gt;" />
  13. </layout>
  14. </appender>

appender节点中,type=RollingFileAppender 的意思是将日志以回滚文件的形式写到文件中。

File节点中规定了文件要写入到什么目录中,上例中的“Log\\LogError\\”代表写入到“程序输入目录(Debug目录)\Log\LogError\”文件夹中。

AppendToFile节点规定了是否覆写到文件中。假设我们已经有了一个20131028.htm日志文件,当为true的时候,日志文件会附加到这个文件上。为false的时候,Log4Net会先将原来的日志文件备份,生成一个新的日志文件(见下图)。

MaxFileSize 最大的文件大小。我们可以使用"KB", "MB" 或 "GB"为 MaxFileSize 作为后缀限定大小。默认的文件大小是10MB。

RollingStyle是文件创建的方式。上例中市设置为以Date方式创建新文件。

DatePattern 日期格式,当我们设置了RollingStyle 为Date方式后,Log4Net会自动使用DatePattern 中的日期格式来创建新的日志文件。

MaxSizeRollBackups这个属性用来设置,当日志文件达到MaxFileSize大小,就自动创建备份文件。备份文件的多少由MaxSizeRollBackups决定。比如说,我们是以日期格式作为日志文件名的,假设今天是2013-10-28,那么今天创建的日志文件名就是20131028.htm,当这个文件中要超过MaxFileSize的时候,Log4Net就自动将老的20131028.htm改名为20131028.htm.1,并创建一个新的20131028.htm文件。

StaticLogFileName 是否采用静态文件名。因为我们这个例子是采用以日期作为文件名,每天的日志文件的名字都是动态的,所以上例中为false。如果采用静态文件名,那么日志文件的名字就是唯一确定的。可以参考下面的配置文件进行设置。下面的配置文件中就是采用静态文件名,生成的日志文件名都是log.txt。

  1. <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
  2. <file value="log.txt" />
  3. <appendToFile value="true" />
  4. <rollingStyle value="Size" />
  5. <maxSizeRollBackups value="10" />
  6. <maximumFileSize value="100KB" />
  7. <staticLogFileName value="true" />
  8. <layout type="log4net.Layout.PatternLayout">
  9. <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
  10. </layout>
  11. </appender>

layout就是布局。Layout中的ConversionPattern就是日志文件的格式,一些符号的介绍附加在下面。由于格式化的方式比较多,除了下面介绍的,大家也可以自己看看官方文档

%m[%message] 输出的日志消息
%n 换行
%d[%datetime] 输出当前语句运行的时刻
%r 输出程序从运行到执行到当前语句时消耗的毫秒数
%t 当前语句所在的线程ID
%p 日志的当前优先级别
%c 当前日志对象的名称
%L 输出语句所在的行号
%F 输出语句所在的文件名
%-数字 表示该项的最小长度,如果不够,则用空格填充

参考:

[1]log4net日志组件经验分享

[2]在C#代码中应用Log4Net(一)简单使用Log4Net (一系列文章,简单明了)

[3]log4net使用详解

[4]Log4Net五步走

[5]Apache log4net™ Config Examples

log4net菜鸟指南的更多相关文章

  1. log4net菜鸟指南二----生成access和txt

    前言 有可能目标计算机缺少某些组件,导致无法生成access文件,或者打不开文件,这时txt文件就可以方便的使用了 一,标准的控制台程序输出日志到access <?xml version=&qu ...

  2. Common lisp菜鸟指南(译)

    Common lisp菜鸟指南(译) Common lisp菜鸟指南(译)

  3. Log4net使用指南

    请在这里下载示例代码 1           简介 1.1          Log4net的优点: 几乎所有的大型应用都会有自己的用于跟踪调试的API.因为一旦程序被部署以后,就不太可能再利用专门的 ...

  4. [转]log4net 使用指南

    声明:本文内容主要译自Nauman Leghari的Using log4net,亦加入了个人的一点心得(节3.1.4). 请在这里下载示例代码 1           简介 1.1          ...

  5. Log4Net使用指南(转)

    转自:http://www.cnblogs.com/dragon/archive/2005/03/24/124254.html 声明:本文内容主要译自Nauman Leghari的Using log4 ...

  6. C# Log4Net使用指南(转)

    1           简介 1.1          Log4net的优点: 几乎所有的大型应用都会有自己的用于跟踪调试的API.因为一旦程序被部署以后,就不太可能再利用专门的调试工具了.然而一个管 ...

  7. Log4Net使用指南之用log4net记录日志到数据库(含有自定义属性)------附Demo例子源代码

    Log4NET简介 log4net库是Apache log4j框架在Microsoft .NET平台的实现,是一个帮助程序员将日志信息输出到各种目标(控制台.文件.数据库等)的工具. 前提 最近做项目 ...

  8. log4net 使用指南,最常遇到的问题整理。。。

    一.    Log4net特征    Log4net是一个用于.NET开发环境的日志记录组件,由于它的超快及超灵活,很多大型的应用都会用到.    它有如下特点:    1.自定义日志输出级别    ...

  9. 动态修改log4net组件的日志文件名

    最近项目使用到log4net来记录日志,当然二话不说先到cnblogs上查看一下各位高手关于log4net的教程和心得主要参看了摩诘 的Log4Net使用指南 (确实是非常好的log4net的入门指南 ...

随机推荐

  1. RF操作滚动条(竖拉)

    方式一:window.scrollBy(0, document.body.scrollHeight) 方式二:window.scrollTo(0, document.body.scrollHeight ...

  2. ACM-ICPC 2018 沈阳赛区网络预赛 J树分块

    J. Ka Chang Given a rooted tree ( the root is node 11 ) of NN nodes. Initially, each node has zero p ...

  3. 实现chrome多用户独立cookie

    2018-02-08 10:58:57 在浏览器设置中添加一个用户并创建桌面快捷方式,属性中我们可以发现 "C:\Program Files (x86)\Google\Chrome\Appl ...

  4. [luoguP2761] 软件补丁问题(状压最短路)

    传送门 n <= 20 很小 所以可以状态压缩 然后因为可能存在环,所以不能DP 那么就用spfa找最短路 被位运算坑了,不清楚优先级一定要加括号 ——代码 #include <queue ...

  5. IBM DB2 控制中心等图形工具在 Windows 下的字体设置

    原文地址(直接看原文): http://loveseaside.iteye.com/blog/648941 [简介如下] IBM DB2 在版本 8.0 以上就提供了一个跨平台的基于 Java 的一套 ...

  6. 【bzoj1717】[Usaco2006 Dec]Milk Patterns 产奶的模式 SA+二分

    Description 农夫John发现他的奶牛产奶的质量一直在变动.经过细致的调查,他发现:虽然他不能预见明天产奶的质量,但连续的若干天的质量有很多重叠.我们称之为一个“模式”. John的牛奶按质 ...

  7. 'Add Solution': A timeout has occurred while invoking commands in SharePoint host process.

    一.问题描述: 在部署SharePoint solution的时候,出现Time out 的问题,错误提示: Error occurred in deployment step 'Add Soluti ...

  8. QBXT 二月五号整理

    给你一列数, 询问和最大的子串. N<=10^6 // N <=10^6 #include<cstdio> #include<iostream> using nam ...

  9. 【CF56E】Domino Principle(线性扫描,伪DP)

    每块多米诺骨牌所在的位置设为x,每块多米诺骨牌高度为h.如果将x位置上的多米诺骨牌向右翻到,它就可以影响[x+1, x+h-1]范围内的所有多米诺骨牌,让他们也翻到,同时这些被翻到的多米诺骨牌还能影响 ...

  10. 【CF696B】Puzzles(树形DP,期望)

    题意:n 个节点的树,初始位置为 1 号节点,初始时间为 1.每次随机地走向任何一个没有走过的子树并且令时间 +1求问走到每一个点时的时间的期望值 思路:比较少见的一道自顶向下的树形DP dp[i]表 ...