log4net的作用

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

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

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

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

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

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

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

而且通过这种方式,不用在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
<?xml version="1.0"?>
<configuration> <configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net-2.0.8"/>
</configSections> <log4net>
<logger name="logerror">
<level value="ALL" />
<appender-ref ref="ErrorAppender" />
</logger> <logger name="loginfo">
<level value="ALL" />
<appender-ref ref="InfoAppender" />
</logger> <appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender">
<param name="File" value="Log\\LogError\\" />
<param name="AppendToFile" value="true" />
<param name="MaxSizeRollBackups" value="100" />
<param name="MaxFileSize" value="10240" />
<param name="StaticLogFileName" value="false" />
<param name="DatePattern" value="yyyyMMdd&quot;.htm&quot;" />
<param name="RollingStyle" value="Date" /> <layout type="log4net.Layout.PatternLayout">
<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;" />
</layout> </appender> <appender name="InfoAppender" type="log4net.Appender.RollingFileAppender">
<param name="File" value="Log\\LogInfo\\" />
<param name="AppendToFile" value="true" />
<param name="MaxFileSize" value="10240" />
<param name="MaxSizeRollBackups" value="100" />
<param name="StaticLogFileName" value="false" />
<param name="DatePattern" value="yyyyMMdd&quot;.htm&quot;" />
<param name="RollingStyle" value="Date" /> <layout type="log4net.Layout.PatternLayout">
<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;" />
</layout> </appender>
</log4net>
</configuration>

三、调用

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

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

或在程序中添加如下代码

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

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

 log4net.ILog loginfo = log4net.LogManager.GetLogger("loginfo");
loginfo.Info(string.Format("当前的时间{0}", DateTime.Now)); log4net.ILog logerror = log4net.LogManager.GetLogger("logerror");
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节点的解释

错误日志类为例进行解释

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

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

None
Fatal
ERROR
WARN
DEBUG
INFO
ALL

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

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

appender节点的解释

ErrorAppender为例

<!-- 错误日志附加介质-->
<appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender"> <!-- name属性指定其名称,type则是log4net.Appender命名空间的一个类的名称,意思是,指定使用哪种介质-->
<param name="File" value="Log\\LogError\\" /> <!-- 输出到什么目录-->
<param name="AppendToFile" value="true" /><!-- 是否覆写到文件中-->
<param name="MaxSizeRollBackups" value="100" /><!-- 备份文件的个数-->
<param name="MaxFileSize" value="10MB" /><!-- 单个日志文件最大的大小-->
<param name="StaticLogFileName" value="false" /><!-- 是否使用静态文件名-->
<param name="DatePattern" value="yyyyMMdd&quot;.htm&quot;" /><!-- 日志文件名-->
<param name="RollingStyle" value="Date" />
<!--布局-->
<layout type="log4net.Layout.PatternLayout">
<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;" />
</layout>
</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。

<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="log.txt" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="100KB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</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. MySQL基本命令和常用数据库对象

    MySQL基本命令: 连接远程主机的MySQL服务(为了保证安全性,执行下面命令时,可以省略-p后面的密码,执行命令后系统会提示输入密码) mysql -p 密码 -u 用户名 -h 主机地址 --d ...

  2. webdriver高级应用- 使用Chrome浏览器自动将文件下载到指定路径

    #encoding=utf-8 from selenium import webdriver import unittest, time class TestDemo(unittest.TestCas ...

  3. MyCAT+MySQL 搭建高可用企业级数据库集群——第3章 MyCat核心配置讲解

    3-1 章节综述 3-2 常用配置文件间的关系 3-3 server.xml配置详解 3-4 log4j2.xml配置文件 3-5 rule.xml 3-6 常用分片算法(上) 3-7 常用分片算法( ...

  4. Cookie和Session的作用和工作原理

    一.Cookie详解 (1)简介 因为HTTP协议是无状态的,即服务器不知道用户上一次做了什么,这严重阻碍了交互式Web应用程序的实现.在典型的网上购物场景中,用户浏览了几个页面,买了一盒饼干和两饮料 ...

  5. BIT+DP

    2018CCPC网络赛 J - YJJ's Salesman HDU - 6447 YJJ is a salesman who has traveled through western country ...

  6. EF的三种模式

    1.DateBase First(数据库优先) 2.Model First(模型优先) 3.Code First(代码优先) 当然,如果把Code First模式的两种具体方式独立出来,那就是四种了. ...

  7. Linux环境CentOS6.9安装配置Elasticsearch6.2.2最全详细教程

    Linux环境CentOS6.9安装配置Elasticsearch6.2.2最全详细教程 前言 第一步:下载Elasticsearch6.2.2 第二步:创建应用程序目录 第四步:创建Elastics ...

  8. 刷题总结——寻宝游戏(bzoj3991 dfs序)

    题目: Description 小B最近正在玩一个寻宝游戏,这个游戏的地图中有N个村庄和N-1条道路,并且任何两个村庄之间有且仅有一条路径可达.游戏开始时,玩家可以任意选择一个村庄,瞬间转移到这个村庄 ...

  9. 96. Unique Binary Search Trees(I 和 II)

    Given n, how many structurally unique BST's (binary search trees) that store values 1-n? For example ...

  10. [NOIP2009] $Hankson$ 的趣味题 (数论,gcd)

    题目链接 Solution 此题,用到的结论都是比较浅显的,但是,我竟然没想到反过来枚举... 只有50分... 被自己蠢哭... 结论比较浅显: 1.对于两个正整数\(a\),\(b\),设 \(g ...