还是log4net的使用
最近做个项目要用到日志系统,这这可把我给难住了,后来问了下度娘,发现只有你想不到的,没有那些找不到的开源组件,后来发现了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
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控件的点击事件中写入以下代码:
运行后,点击按钮,点击几次,就会在库中增加几条记录,效果如图二:
图二 Log4net插入数据库 以上介绍的是Log4net常用的两种日志的记录方法,在实际应用中,还有其它的记录方法,如控制台的应用、将日志的信息发送到指定的邮箱。 可以见得,在开发过程中我们在运用Log4net时,可以给我们的应用程序带来丰富的体验度,通过提高日志的记录性能,可以精确的控制日志信息 的输出,在.NET中,可以方便的通过配置文件,就方便日志的记录,Log4net还有其它很多丰富的应用功能,感兴趣的朋友可以进一步的去研究它。 |
还是log4net的使用的更多相关文章
- Log4net - 规则简介
参考页面: http://www.yuanjiaocheng.net/CSharp/csharprumenshili.html http://www.yuanjiaocheng.net/entity/ ...
- Log4net - 项目使用的一个简单Demo
参考页面: http://www.yuanjiaocheng.net/entity/entitytypes.html http://www.yuanjiaocheng.net/entity/entit ...
- log4net使用手册
1. log4net简介 log4net是.Net下一个非常优秀的开源日志记录组件.log4net记录日志的功能非常强大.它可以将日志分不同的等级,以不同的格式,输出到不同的媒介.Java平台下,它还 ...
- Log4Net应用问题
问题 一.日志存储方式 1.txt 2.SQLServer数据库 3.log文件 二.项目类型不同 1winFrom 2webFrom 3MVC 4WPF 5控制台 三.切分依据不同 1.空间大小 2 ...
- 在C#代码中应用Log4Net系列教程(附源代码)
Log4Net应该可以说是DotNet中最流行的开源日志组件了.以前需要苦逼写的日志类,在Log4Net中简单地配置一下就搞定了.没用过Log4Net,真心不知道原来日志组件也可以做得这么灵活,当然这 ...
- Log4net入门(帮助类篇)
在前几篇Log4net入门文件的讲述过程中,我们在使用log4net的类中都要编写如下一行代码: private static log4net.ILog log = log4net.LogManage ...
- Log4net入门(WCF篇)
在上一篇Log4net入门(ASP.NET MVC 5篇)中,我们讲述了如何在ASP.NET MVC 5项目中使用log4net.在这一篇中,我们将讲述如何在WCF应用中使用log4net,为了讲述这 ...
- Log4net入门(ASP.NET MVC 5篇)
在前4篇Log4net入门文章中,我们讲述了log4net的一些简单用法,在这一篇中我们主要讲述如何在ASP.NET MVC 5项目中将日志信息写入SQL Server数据库中. 一.创建最简单的AS ...
- Log4net入门(SQL篇)
我们在Log4net入门(回滚日志篇)中详细讲述了如何将日志信息输出到日志文件中,在这一篇中,我们将讲述如何将日志文件写入SQL Server数据库,以方便我们分析统计日志信息. 首先,我们在SQL ...
- Log4net入门(回滚日志文件篇)
在上一篇Log4net(日志文件篇)中,我们使用"log4net.Appender.FileAppender"将日志信息输出到一个单一的文件中,随着应用程序的持续使用,该日志文件会 ...
随机推荐
- chrome console 调试xpath
chrome console F12->$x(“//title”) [<title>Online Tools for Software Developers (Free)</t ...
- ASP.NETURL地址防注入过滤问题
首先在Global.asax.cs里面配置一个 提交事件 不用过滤所有的地址 过滤 GET POST的地址就行了 /// <summary> /// 防止sql注入 /// </s ...
- paip.vs2010 或.net 4.0安装出错解决大法.
paip.vs2010 或.net 4.0安装出错解决大法. 作者Attilax , EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.cs ...
- Linux下多核环境Erlang的SMP測试
目标 (1) 了解在多核cpu环境下,erlang并发进程调度对各个cpu核负载的影响: (2) Erlang虚拟机的内存添加机理: (3) Erlang进程的调度 ...
- 热烈祝贺Polymer中文组织站点上线
欢迎来到前端世界的明天 由于官网被墙, 所以 http://docs.polymerchina.org/ 其实是一件很有意义的事. 组件化和重用,一直是编程界几十年来前进的方向和目标,随着时间的推移和 ...
- 小心ThreadLocal的陷阱
ThreadLocal用在多线程时保存线程级的局部变量,当我们需要在线程内共享数据时,ThreadLocal屡试不爽,但是ThreadLocal也会有一个问题,当你使用线程池时,线程可能会被重用,所以 ...
- 玩转Android---事件监听篇---第2篇
事件监听篇---第二篇 下面是各种常用控件的事件监听的使用 ①EditText(编辑框)的事件监听---OnKeyListener ②RadioGroup.RadioButton(单选按钮)的事件监听 ...
- HTML网页制作:[12]使用框架结构之frameset
首先,我希望在你的目录下,有4个网页,各自显示不同的内容. 如图所示: 1.html显示“火影忍者” 2.html显示“英雄联盟” 3.html显示“嵌入式开发.网页开发.安卓开发” 4.html显示 ...
- dom处理配置文件_待完善
import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java ...
- hive 函数学习
NAME PRICE ---- ----- AAA 1.59 AAA 2.00 AAA 0.75 BBB 3.48 BBB 2.19 BBB 0.99 BBB 2.50 I would like to ...