最近做个项目要用到日志系统,这这可把我给难住了,后来问了下度娘,发现只有你想不到的,没有那些找不到的开源组件,后来发现了log4net,但是我是控制台程序,没有个实例还真不好搞,想想还是看看他的运行过程吧,记录如下:

首先我们来分析一下Log4net的工作原理:

  Log4net是基于.NET开发的一款非常著名的记录日志开源组件。它通过一套XML配置的日志引擎,将日志分不同的等级,分别 是:FATAL 、 ERROR、 WARN、 INFO 、 DEBUG、ALL(允许所有的日志请求)和OFF(拒绝所有的日志请求),缺省为DEBUG,前五个可以看到和我们平常在调试应用程序的出错有点类似, 在编译器中也会留下如错误、警告之类的提示信息,它们的错误级别不断的降低。

  我们接着看Log4net的核心组成部分,Log4net主要由五个部分组成,分别为Logger,Appenders, Filters, Layouts 和Object Renders。

  1) Logger:主要负责日志的记录,它记录的方式有多种,可以是以文件、数据库、控制台、邮件等多处方式;

  2) Appenders:主要负责记录日志介质的方式,它的输出方式主要包括:

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

  AspNetTraceAppender:能用ASP.NET中跟踪的方式查看记录的日志。

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

  ColoredConsoleAppender:在终端的窗口写下高亮度的日志事件。

  ConsoleAppender:将日志输出到控制台。

  EventLogAppender:将日志写到Windows操作系统的日志中去。

  FileAppender:将日志写到文件中。

  ForwardingAppender:用来为一个Appender指定一组约束。

  MemoryAppender:将日志存到内存缓冲区。

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

  OutputDebugStringAppender:配置该Appender以向OutputDebugString API写入日志。

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

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

  SmtpAppender:将日志写到邮件中。

  SmtpPickupDirAppender:配置与SmtpAppender类似,但要把SmtpHost换为PickupDir。

  TraceAppender:将日志写到.NET trace 系统。

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

  以上有些输出方式可能会经常用到,有些可能会不经常用到,具体我们在下面举例来说明。

  3) Layouts:主要负责把记录日志格式化输出,显示得格式主要如下:

  %timestamp [%thread] %-5level %logger{2} %ndc - %message%newline

  timestamp: 表示程序已经开始执行的时间。 单位[毫秒]。

  Thread:执行当前代码的线程。

  Level:日志的级别。

  Logger:日志相关请求的名称。

  Message:日志消息。

  newline:换行。

  下面我们来举两个常用的实例来看看Log4net是如何在.NET环境下实现日志的记录的。

一、 文件记录方式:

  我们考虑一下这样的情况,首先我们要把日志的记录文件存放到一个记事本文档中,另外,随着应用程序运行的时间不断增长,写入这个记事本文件的内 容也会越来越大,这个时候,我们可能会想如果按天来生成日志文件或者文件大小到达一定的大小时就自动增加一个新的日志文件,无疑会提高我们检查日志的效 率,Log4net就可以轻松的实现这样的功能。我们看具体的应用,步骤如下:

  1) 首先建立一个Windows应用程序的项目,然后需要增加应用程序的配置文件App.Config,如果在WEB应用程序中,就需要配置 Web.Config,然后添加引用,加入之前我们在网上下载的Log4net.dll文件,然后在AssemblyInfo.cs文件里加入下面的语 句:

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

  2) 在配置文件里面设置如下:

< ?xml version="1.0" encoding="utf-8" ?>

  < configuration>

  < !--日志配置部分-->

  < configSections>

  < section name="log4net" type="System.Configuration.IgnoreSectionHandler" />

  < /configSections>

  < !-- Log4net配置设定 -->

  < log4net debug="false">

  < appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">< !--RollingFileAppender将日志以回滚文件的形式写到文件中-->

  < file value="log.txt" />< !--输出日志文件的路径-->

  < appendToFile value="true" />< !--输出日志时自动向后追加-->

  < rollingStyle value="Composite" />

  < datePattern value=".yyyyMMdd" />< !--输出日期格式-->

  < maxSizeRollBackups value="10" />< !--日志最大个数-->

  < maximumFileSize value="1MB" />< !--单个日志的最大容量-->

  < staticLogFileName value="true" />< !--true表示当前最新日志文件名永远为file节中-->

  < layout type="log4net.Layout.PatternLayout">

  < conversionPattern value="%date %-5level %logger -%m%n" />

  < /layout>

  < /appender>

  < root>

  < level value="WARN" />

  < appender-ref ref="RollingLogFileAppender" />

  < /root>

  < /log4net>

  < /configuration>

  %d, %date :表示当然的时间

  %level : 表示日志的级别

  %logger, %c:表示日志产生的主题,通常是所在的类名,便于定位问题

  %m, %message :表示日志的具体内容

  %n, %newline: 换行

3) 然后在Form窗口的代码里先定义下面的接口:

  private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

  我们可以在窗口中拖动一个Button控件,然后在它的Click事件中,写入以下的代码:

  log.Error("这是一个错误日志");

  log.Fatal("这是一个致命的错误日志");

  log.Warn("这是一个警告日志");

  运行过后,然后点击Button,可以看到生成一个log.txt日志文件,里面写入的内容如下:

  2009-06-01 21:16:54,171 ERROR Log4netApp.Form1 -这是一个错误日志

  2009-06-01 21:16:54,187 FATAL Log4netApp.Form1 -这是一个致命的错误日志

  2009-06-01 21:16:54,187 WARN Log4netApp.Form1 -这是一个警告日志

  当我们在第二天再运行此程序时,就会发现到前一天生成的文件已经改名成log.txt.加上年月日了,效果如图一:

  

  图一 日志文件列表

  二、 数据库记录的方式:

  1) 建立存入日志的数据表LogInfo

      CREATE TABLE [dbo].[LogInfo] (

  [AddDate] [datetime] NOT NULL,

  [Message] [varchar] (2000) NOT NULL

  )

  2) 建立一个ASP.NET WEB项目,并将log4net.dll添加到引用。然后在AssemblyInfo.cs中加入下面的代码:

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

  3) 添加一个全局应用程序类Global.asax,然后在Application_Start事件里添加下面的代码:

  log4net.Config.XmlConfigurator.Configure();

  4) 接下来需要在Web.Config文件里面配置详细的数据库设置,如下:

  

< ?xml version="1.0"?>

  < configuration>

  < !--日志配置部分-->

  < configSections>

  < section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>

  < /configSections>

  < appSettings/>

  < connectionStrings/>

  < system.web>

  < compilation debug="true" />

  < authentication mode="Windows" />

  < /system.web>

  < !-- Log4net配置设定 -->

  < log4net>

  < logger name="LogRecord">

  < level value="ALL" />

  < appender-ref ref="AdoNetAppender_SqlServer" />

  < /logger>

  < appender name="AdoNetAppender_SqlServer" type="log4net.Appender.AdoNetAppender">

  < bufferSize value="1"/>< !--log信息记录的缓冲大小 -->

  < connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>

  < connectionString value="data source=(local);initial catalog=test1;integrated security=false;persist security info=True;User ID=sa;Password="/>< !--数据库连接字符串 -->

  < commandText value="INSERT INTO LogInfo([AddDate],[Message]) Values( @log_date,@message)"/> < !--数据库插入 -->

  < parameter>

  < parameterName value="@log_date" />

  < dbType value="DateTime" />

  < layout type="log4net.Layout.RawTimeStampLayout" />< !--当前日期 -->

  < /parameter>

  < parameter>

  < parameterName value="@message" />

  < dbType value="String" />

  < size value="2000" />

  < layout type="log4net.Layout.PatternLayout">< !--后台日志的信息 -->

  < conversionPattern value="%message" />

  < /layout>

  < /parameter>

  < /appender>

  < /log4net>

  < /configuration>

5) 然后在页面上拖一个Button控件和一个Label控件,在Button控件的点击事件中写入以下代码:

  

      try

  {

  ILog logger = LogManager.GetLogger("LogRecord");

  logger.Debug("用Log4Net写入数据库日志");

  }

  catch (Exception ex)

  {

  throw ex;

  }

  finally

  {

  lbMsg.Text="操作日志已经记录到数据库";

  }

  运行后,点击按钮,点击几次,就会在库中增加几条记录,效果如图二:

  

  图二 Log4net插入数据库

  以上介绍的是Log4net常用的两种日志的记录方法,在实际应用中,还有其它的记录方法,如控制台的应用、将日志的信息发送到指定的邮箱。

  可以见得,在开发过程中我们在运用Log4net时,可以给我们的应用程序带来丰富的体验度,通过提高日志的记录性能,可以精确的控制日志信息 的输出,在.NET中,可以方便的通过配置文件,就方便日志的记录,Log4net还有其它很多丰富的应用功能,感兴趣的朋友可以进一步的去研究它。

还是log4net的使用的更多相关文章

  1. Log4net - 规则简介

    参考页面: http://www.yuanjiaocheng.net/CSharp/csharprumenshili.html http://www.yuanjiaocheng.net/entity/ ...

  2. Log4net - 项目使用的一个简单Demo

    参考页面: http://www.yuanjiaocheng.net/entity/entitytypes.html http://www.yuanjiaocheng.net/entity/entit ...

  3. log4net使用手册

    1. log4net简介 log4net是.Net下一个非常优秀的开源日志记录组件.log4net记录日志的功能非常强大.它可以将日志分不同的等级,以不同的格式,输出到不同的媒介.Java平台下,它还 ...

  4. Log4Net应用问题

    问题 一.日志存储方式 1.txt 2.SQLServer数据库 3.log文件 二.项目类型不同 1winFrom 2webFrom 3MVC 4WPF 5控制台 三.切分依据不同 1.空间大小 2 ...

  5. 在C#代码中应用Log4Net系列教程(附源代码)

    Log4Net应该可以说是DotNet中最流行的开源日志组件了.以前需要苦逼写的日志类,在Log4Net中简单地配置一下就搞定了.没用过Log4Net,真心不知道原来日志组件也可以做得这么灵活,当然这 ...

  6. Log4net入门(帮助类篇)

    在前几篇Log4net入门文件的讲述过程中,我们在使用log4net的类中都要编写如下一行代码: private static log4net.ILog log = log4net.LogManage ...

  7. Log4net入门(WCF篇)

    在上一篇Log4net入门(ASP.NET MVC 5篇)中,我们讲述了如何在ASP.NET MVC 5项目中使用log4net.在这一篇中,我们将讲述如何在WCF应用中使用log4net,为了讲述这 ...

  8. Log4net入门(ASP.NET MVC 5篇)

    在前4篇Log4net入门文章中,我们讲述了log4net的一些简单用法,在这一篇中我们主要讲述如何在ASP.NET MVC 5项目中将日志信息写入SQL Server数据库中. 一.创建最简单的AS ...

  9. Log4net入门(SQL篇)

    我们在Log4net入门(回滚日志篇)中详细讲述了如何将日志信息输出到日志文件中,在这一篇中,我们将讲述如何将日志文件写入SQL Server数据库,以方便我们分析统计日志信息. 首先,我们在SQL ...

  10. Log4net入门(回滚日志文件篇)

    在上一篇Log4net(日志文件篇)中,我们使用"log4net.Appender.FileAppender"将日志信息输出到一个单一的文件中,随着应用程序的持续使用,该日志文件会 ...

随机推荐

  1. 百度地图V2.0实践项目开发工具类bmap.util.js V1.4

    /** * 百度地图使用工具类-v2.0(大眾版) * * @author boonya * @date 2013-7-7 * @address Chengdu,Sichuan,China * @em ...

  2. Working with Strings(使用Oracle字符串)

    Working with Strings By Steven Feuerstein  Part 3 in a series of articles on understanding and using ...

  3. 解决Mac OS Adobe Flash Builder 4.7 java heap space 问题【转】

    1. 在Finder中打开Adobe Flash Builder 4.7的安装目录 2. 在Adobe Flash Builder 4.7.app上点击右键“Show Package contents ...

  4. XML是什么,它能够做什么?——写给XML入门者

    XML就可以扩展标记语言(eXtensible Markup Language).标记是指计算机所能理解的信息符号,通过此种标记,计算机之间能够处理包括各种信息的文章等.怎样定义这些标记,既能够选择国 ...

  5. RAID技术

    RAID:其基本思想就是把多个相对便宜的硬盘组合起来,成为一个硬盘阵列组,使性能达到甚至超过一个价格昂贵.容量巨大的硬盘.所以称为廉价磁盘冗余数组 RAID级别: RAID 0亦称为带区集.它是将多个 ...

  6. jquery知识点积累

    网上资源汇总学习: jquery的选择器是CSS1-3,xpath的结合物.JQuery提取了这二种查询语言最好的部分,创造出了最终的jquery表达式查询语言. xpath是一门在xml文档里查找信 ...

  7. windows不能在本地计算机启动SQL Server(MSSQLSERVER)

    windows不能在本地计算机启动sql server 在登录数据库的时候,发现数据库不能登录,提示[无法连接到实例],很明显这是因为数据库服务没有启动导致的,我们打开[服务]启动相应的SQL数据库服 ...

  8. EXT.NET常用属性

    Ext_数字输入框_Ext.form.NumberField:   <mce:script type="text/javascript"><!-- /* Ext. ...

  9. https配置

    总结了一下: 所谓用HTTPS的时候 app 前端要配置SSL 证书的意思就是:相当于服务器端与app 前端, 一个拿公钥,一个拿私钥.简单得说就是客户端发送请求的时候,用配置好的SSL证书里的加密方 ...

  10. BZOJ 3503: [Cqoi2014]和谐矩阵( 高斯消元 )

    偶数个相邻, 以n*m个点为变量, 建立异或方程组然后高斯消元... O((n*m)^3)复杂度看起来好像有点大...但是压一下位的话就是O((n*m)^3 / 64), 常数小, 实际也跑得很快. ...