原文:http://kb.cnblogs.com/page/100968/

1.Log4Net 简单使用

  使用Log4net必须引入log4net.dll 文件,因为log4net 是开源的,所以可以直接将源码添加到工程项目中去。然后生成新的dll文件。

  下面使用配置一个最简单的文件输出和控制台输出。 

  Log4Net 的配置文件,此段内容添加到App.config 或者 web.config 文件中:

<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
</configSections>
<log4net>
<appender name="FileAppender" type="log4net.Appender.FileAppender">
<file value="D:\a.log"></file>
<appendToFile value="true"></appendToFile>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="[%d]:%n%m%n"></conversionPattern>
</layout>
</appender>
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="[%d]:%n%m%n"></conversionPattern>
</layout>
</appender>
<root>
<level value="INFO"></level>
<appender-ref ref="FileAppender"></appender-ref>
<appender-ref ref="ConsoleAppender"></appender-ref>
</root>
<logger name="MyLogger">
<level value="ERROR"></level>
<appender-ref ref="FileAppender"></appender-ref>
<appender-ref ref="ConsoleAppender"></appender-ref>
</logger>
</ log4net>

2.Log4Net 结构

Log4net 主要分为5个核心组件: Logger, Appender, Filter, Layout, Object Render。 

  Logger: 

  主要用于记录日志的分类和控制日志的级别。它可以以多种格式输出日志信息,同时它也可以控制日志的输出级别。上面的简单例子我们看似做了日志输出,但是没有输出任何日志结果,因为我们在日志级别上做了限制。 

  Appender: 

  这里我们简单称之为“附着器”。意思就是说日志的输出必须依赖于它,更确切的说以文本形式输出,还是控制台格式输出都必须要依靠它来控制。Log4net定义了多种附着器:

  (1) AdoNetAppender 将日志记录到数据库中。可以采用SQL和存储过程两种方式 。

  (2) AnsiColorTerminalAppender 在ANSI 窗口终端写下高亮度的日志事件。 

  (3) AspNetTraceAppender 能用asp.net中Trace的方式查看记录的日志。

  (4) BufferingForwardingAppender 在输出到子Appenders之前先缓存日志事件。

  (5) ConsoleAppender 将日志输出到控制台。

  (6) EventLogAppender 将日志写到Windows Event Log。

  (7) FileAppender 将日志写到文件中。 

  (8) MemoryAppender 将日志存到内存缓冲区。 

  (9) NetSendAppender 将日志输出到Windows Messenger service,这些日志信息将在用户终端的对话框中显示。

  (10) RemoteSyslogAppender 通过UDP网络协议将日志写到Remote syslog service。

  (11) RemotingAppender 通过.NET Remoting将日志写到远程接收端。

  (12) RollingFileAppender 将日志以回滚文件的形式写到文件中。 

  (13) SmtpAppender 将日志写到邮件中。

  (14) TraceAppender 将日志写到.NET trace 系统。

  (15) UdpAppender 将日志connectionless UDP datagrams的形式送到远程宿主或以UdpClient的形式广播。

  Filter:

  Appender 是将日志以缺省值的方式输出,意思就是按照默认值的方式输出。而Filter 意思就是过滤器,使用Filter 可以将日志以不同格式来输出。

  Layout:

  这个用于控制日志输出显示格式。

  Object Render:

  用于按照用户自定义标准来输出日志。

  Log4net 结构图 (从其他地方截图过来)

  

Log4net 的日志对象管理器LogManager:LogManager是用于来管理所有的Logger对象的,GetLogger() 可以用来查找已经存在的Logger对象,如果对象不存在它会自动创建一个Logger对象,并且管理它。

3.Log4Net 日志级别

Log4net 分为如下几个级别:

  FATAL  毁灭级别

  ERROR 错误级别

  WARN 警告级别

  INFO 消息级别

  DEBUG 调试级别

  这几种日志级别高低:FATAL> ERROR> WARN > INFO > DEBUG。

  只有日志输出级别大于或等于配置的级别才能输出日志信息。

  比如我的日志配置级别为INFO,那么只有log.Info(), log.Warn(), log.Error(), log.Fatal()才能输出日志信息,Debug方式就不能输出。

  Log4net中还有两种特殊的配置级别: ALL - 允许所有的日志级别输出,OFF - 拒绝所有的日志级别输出。

4.Log4Net 配置说明

<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
</configSections>
<log4net>
<!--记录日志到数据库-->
<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
<bufferSize value="100" />
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<connectionString value="data source=GAS-HECHEN;initial catalog=dsc141051_db;integrated security=false;persist security info=True;User ID=sa;Password=000000" />
<commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />
<parameter>
<parameterName value="@log_date" />
<dbType value="DateTime" />
<layout type="log4net.Layout.RawTimeStampLayout" />
</parameter>
<parameter>
<parameterName value="@thread" />
<dbType value="String" />
<size value="255" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%thread" />
</layout>
</parameter>
<parameter>
<parameterName value="@log_level" />
<dbType value="String" />
<size value="50" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%level" />
</layout>
</parameter>
<parameter>
<parameterName value="@logger" />
<dbType value="String" />
<size value="255" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%logger" />
</layout>
</parameter>
<parameter>
<parameterName value="@message" />
<dbType value="String" />
<size value="4000" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%message" />
</layout>
</parameter>
<parameter>
<parameterName value="@exception" />
<dbType value="String" />
<size value="2000" />
<layout type="log4net.Layout.ExceptionLayout" />
</parameter>
</appender> <!--输入日志到控制台-->
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="[时间]:%d%n[级别]:%p%n[内容]:%m%n%n"></conversionPattern>
</layout>
</appender> <appender name="FileAppender" type="log4net.Appender.FileAppender">
<param name="file" value="D:\a.log"></param>
<param name="appendToFile" value="true"></param>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="[时间]:%d%n[级别]:%p%n[内容]:%m%n%n"></conversionPattern>
</layout>
</appender> <root>
<level value="INFO"></level>
<appender-ref ref="FileAppender"></appender-ref>
<appender-ref ref="ConsoleAppender"></appender-ref>
</root>
<logger name="MyLogger">
<level value="INFO"></level>
<appender-ref ref="FileAppender"></appender-ref>
<appender-ref ref="ConsoleAppender"></appender-ref>
</logger>
</log4net>

这个配置文件定义了三种不同的Appender,分别是ADO.NET 记录到数据,ConsoleAppender 从控制台输出, FileAppender 日志信息文件输出。

  然而Log4Net 的配置附着器远不止这些,这里上传一个比较全的附着器配置文件供大家参考 点击下载

  根据上面的日志配置文件仍然使用如下代码测试:

  

这里需要注意,log4net.Config.XmlConfigurator.Configure();   这个相当于初始化Log4net, 如果是在Web程序中,我们可以将这句话添加到 Global.asax 文件的Application_Start(object sender, EventArgs e) 方法中,在程序启动的时候就初始化配置信息。

这里说明两个配置:

  

这里的 root 和 logger 配置节点,root 就相当于默认的日志对象配置,而logger是指定特定的日志配置。他们可以共存。

对于这两个节点下面都有 level 和 appender-ref 节点,分别用于指定日志的输出级别和引用哪些附着器。每个日志对象都可以使用多个appender,这里的配置同时使用文件输出和控制台输出。

  

上面的程序声明了两个日志对象 log 和 log1,log 是在初始化的时候存在的,它得到的是<logger name="MyLogger"> 这个日志对象,而log1 是 LogManager 中不存在的日志对象,这里它会重新创建一个并且由LogManager 管理,后面再次使用则使用这个已经存在的对象。 这里两个日志对象同时使用结果如下:

  

现在我修改配置文件的日志文件输出级别:


<logger name="MyLogger">
<level value="WARN"></level>
<appender-ref ref="FileAppender"></appender-ref>
<appender-ref ref="ConsoleAppender"></appender-ref>
<appender-ref ref="AdoNetAppender"></appender-ref>
</ logger>

  运行得到的结果如图:

  

显然MyLogger对象日志没有输出日志信息。

六. Log4Net 参数说明

  上面我们看到的配置文件中有类似 %m %n 等这样的符号,这些符号都是有特殊意义的。


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

七. 自定义轻量级日志系统

  具体参照文章: ORM映射框架总结--日志处理

  这里不再过多的说明,示例下载

Log4Net 全方位跟踪程序运行的更多相关文章

  1. (转)Log4Net 全方位跟踪程序运行

    转自:http://www.cnblogs.com/qingyuan/archive/2011/05/13/2045616.html 前端日子自己写了一个简单的日志跟踪程序,现在目前正在做的一个项目中 ...

  2. log4net 日志跟踪程序

    Log4net 是 Apache 下一个开放源码的项目,它是Log4j 的一个克隆版.我们可以控制日志信息的输出目的地.Log4net中定义了多种日志信息输出模式. 在做项目的时候令我最头疼的是在程序 ...

  3. Git.Framework 框架随手记--准备工作

    前面已经提到过了本框架的由来,时至今日该框架已经和最初版本有了天壤之别.因为仍有部分代码是采用原有的框架,所以本框架也算不上原创,只是在原有的基础上不断的改进,所以希望了解此框架的人不要过多的指责. ...

  4. Quartz+log4net实现控制台程序定时运行,并且记录日志

    c# 控制台程序定时运行,并记录日志. 组件Quartz + log4net Quartz定时运行程序,log4net记录日志. 首先建立控制台程序"QuartzTest" 安装Q ...

  5. Log4Net使用教程

    简介 为方便跟踪程序运行情况,我们可以记录系统运行异常日志,winform和web都可以通过继承异常或者try来实现. 官方网站:http://logging.apache.org/log4net/ ...

  6. Log4Net 笔记

    Log4net框架简介: Log4net 是 Apache 下的一个开源项目,log4net框架基于Apache log4j™.Log4net用于日志记录或跟踪API,它允许开发人员控制以任意粒度输出 ...

  7. NHibernate的调试技巧和Log4Net配置

    1.查看nhibernate写在控制台里的sql语句 在配置文件中有这么个选项,假如把它设置为true,nhibernate会把执行的sql显示在控制台上. <property name=&qu ...

  8. PostSharp 结合 log4net 自动记录日志

    环境: VS 2012 PostSharp-4.1.28  (下载地址)https://visualstudiogallery.msdn.microsoft.com/a058d5d3-e654-43f ...

  9. post sharp 与log4net 结合使用,含执行源码 转拷

    环境: VS 2012 PostSharp-4.1.28 (下载地址)https://visualstudiogallery.msdn.microsoft.com/a058d5d3-e654-43f8 ...

随机推荐

  1. Ruby实现wordCounter

    做解密发现的: m={} File.open("test1.txt") do |f| f.each_line do |line| line.chomp! #去除每行结尾的回车(\n ...

  2. DB2数据库之间联邦

    现在有以下两个数据库:sample,QIN 需要在数据库QIN中访问sample中的表ACT 1.数据库编目 C:\Users\QIN>db2 catalog tcpip node OLIVER ...

  3. shell-IF判断

    #!/bin/bash echo "-----------------strat---------------" read -p "Enter a number:&quo ...

  4. Java使用JSP Tag Files & JSP EL Functions打造你自己的页面模板

    1. 简单说明:在JSP 2.0后, 你不再需要大刀阔斧地定义一堆TagSupport或BodyTagSupport, 使用JSP Tag Files技术可以实现功能强大的页面模板技术. 在这里抛砖引 ...

  5. 5.Knockout.Js(自定义绑定)

    前言 你可以创建自己的自定义绑定 – 没有必要非要使用内嵌的绑定(像click,value等).你可以你封装复杂的逻辑或行为,自定义很容易使用和重用的绑定.例如,你可以在form表单里自定义像grid ...

  6. 推荐几款web站点JS(JQeury)图表(饼图,柱图,线图)

    一 Google Chart Tools 官网:https://developers.google.com/chart/ 谷歌图表工具提供了一个完美的方式形象化您的网站上的数据.从简单到复杂的层次结构 ...

  7. HttpModule在Web.config的配置和动态配置

    学习笔记 ASP.Net处理Http Request时,使用Pipeline(管道)方式,由各个HttpModule对请求进行处理,然后到达 HttpHandler,HttpHandler处理完之后, ...

  8. bootstrap-fileinput 图片上传

    bootstrap-fileinput 源文件 在网上下载 CSS: <link href="../../static/Bootstrap/css/plugins/bootstrap- ...

  9. copy-mutableCopy

    copy和mutableCopy语法的目的:改变副本的时候,不会影响到源对象:调用Copy产生的对象是不可变的,调用mutableCopy产生的对象是可变的,与调用对象是否可变无关. Copy 需要先 ...

  10. java读取资源文件

    ResourceBundle bundle = ResourceBundle.getBundle("cn.liuning.resource.MessageResource"); b ...