- 浏览: 33450 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
50050192:
扯蛋,误人
[原]JavaSocket实现广播聊天室 -
Dxx23:
受用了!
电子书分享下,谢谢!
[原]Oracle中列自增的方法 -
yulongxiang:
学习了!!!
Ajax的实现原理(asp.net ajax读书笔记)
本文不是教你全面了解log4net,本文只是希望教会你按步就班,照糊芦画瓢般就会用log4net
1,引入log4net.dll组件
2,建立一个配置文件
两种方法,一种是在Web.Config或App.Config里
加入以下配置节
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
</configSections>
上面的配置节,复制就可以用了
加入log4net配置内容的定义,这个紧接着上面的内容定义在config文件里就可以了,下面是一个范例:
<log4net>
<root>
<level value="ALL" />
<appender-ref ref="rollingFile" />
</root>
<appender name="rollingFile" type="log4net.Appender.RollingFileAppender,log4net" >
<param name="File" value="log.txt" />
<param name="AppendToFile" value="false" />
<param name="RollingStyle" value="Date" />
<param name="DatePattern" value="yyyy.MM.dd" />
<param name="StaticLogFileName" value="true" />
<layout type="log4net.Layout.PatternLayout,log4net">
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
<param name="Header" value="
----------------------header--------------------------
" />
<param name="Footer" value="
----------------------footer--------------------------
" />
</layout>
</appender>
<appender name="consoleApp" type="log4net.Appender.ConsoleAppender,log4net">
<layout type="log4net.Layout.PatternLayout,log4net">
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
</layout>
</appender>
<logger name="Log4NetTest.LogTest">
<level value="DEBUG" />
<appender-ref ref="rollingFile" />
<appender-ref ref="coloredConsoleApp" />
<appender-ref ref="SystemEvent" />
</logger>
</log4net>
你懒得写的话,复制上面的内容也可以
不过,还是稍做讲解,log4net配置节的XSD层次如下
<log4net>
<root><level /><appender-ref ref="" /></root>
<appender name="" type="Appender的完全限定类名">
<param name="" value="" />
<layout type="log4net.Layout.PatternLayout,log4net">
<param name="" value="" />
</layout>
</appender>
<logger>
<level value="" />
<appender-ref ref="" />
</logger>
看不懂?其实很简单啦
log4net是log4net配置节的根标记
root标记定义一个根级别的记录者,log4net的记录者采用层级组织的, 两个logger,A的名字叫loggerA,B的名字叫loggerA.B的话,那么B就是A的儿子,B会自动继承A的一些定义,例如LEVEL定义,appender-ref定义等,root就是总的logger,其余定义的logger都是他的后代,都会继承他的设置
包括ROOT在内的每一个LOGGER(ROOT也是一个LOGGER,只不过,他是祖先而已,别的方面,跟其他LOGGER一样),都可以定义Level
level定义记录的日志级别,就是说,你要记录哪个级别以上的日志,级别由高往低依次是:
None
Fatal
ERROR
WARN
DEBUG
INFO
ALL
级别的定义要注意,如果你定义DEBUG,那么低于DEBUG级别以下的信息,将不会记入日志,啥意思呢?就是说,就算你在程序里,用log.info()来写入一个日志信息,可是你在配置中指定level为DEBUG,由于INFO级别低于DEBUG,所以,不会被记入日志.这样的处理非常灵活
Logger还有一个配置就是appender-ref了,ref是参照的意思,log4net的架构非常有意思,可扩展性非常高非常值得借鉴,他分为四个要素:
logger
appender
layout
filter
logger是负责日志的记录者
appender提供记录的介质
layout负责把记入的内容格式化
filter负责把内容进行筛选
可以说,整个过程就是一个日志流水线,每个成员负责其中的一个环节
logger发出记录信息,appender接到信息,根据内部的layout配置对记录信息格式化,根据filter决定此信息是否被过滤掉,最后,将其序列化
因此,logger的appender-ref就是定义说,LOGGER要找谁去将内容写入磁盘,流或其他介质,因此,十分重要吧
既然是ref引用,那肯定要定义这个被引用的appender对象了呀
每个appender都代表了一个输出介质
name属性指定其名称,type则是log4net.Appender命名空间的一个类的名称,意思是,指定使用哪种介质
log4net支持的appender类型有十几种,最常用的有rollingFileAppender,AdoNetAppender,EventLogAppender,FileAppender,分别把日志记入文件,系统日志和数据库
除此之外,appender内的其他参数都用param标记,以key/value形式定义于其内
这里有个小提示,每一个appender,log4net并没有在文档中提出他们需要哪些参数,那么,我们怎么知道呢?
原来,这些param的名称,你可以直接查对应的appender类的属性名即可,例如,使用EventLogAppender时,通过查看类的属性,我们知道其有
LogName,ApplicationName属性,那么,意味着,你可以直接在这个APPENDER的param里加入以下内容:
<param name="LogName" value="Application" />
<param name="ApplicationName" value="log4netTest" />
定义了appender的NAME及TYPE属性,以及使用param为其指定参数后,一个appender就建立了,你可以使用他的名字在LOGGER的<appender-ref中去 引用它,那么,引用它的LOGGER在写入日志时,就是写到了APPENDER中定义的介质中去了
一个LOGGER可以引用多个APPENDER,其结果是,同一个日志,被同时记录到多个介质中去 ,便如,同时发邮件,写入系统日志,发送到远程主机.不过,虽然可以这样做,但是还是要小心,因为,会对性能有一定的影响,除非你需要,否则,不要乱用此功能
另外,appender中可以定义可选的layout,layout的定义非常有必要,如果你不想将来看到你的日志会感觉头晕的话,虽然log4net帮你写入日志,但是,日志信息的格式却是我们使用者自行定义的
layout的type参数指定使用哪个类的定义来格式化,常用的有XmlLayout,SimpleLayout,PatternLayout,这个当然要根据你的需要,以及你要产生的格式来选啦,如果你要输出成XML文档格式,你肯定不能用simplelayout吧
layout使用param以KEY/VALUE形式定义其参数
各个Layout类使用的参数当然不一样啦,具体的,你可以去看各个Layout类的属性
其中,PatternLayout可以使用ConversionPattern参数来指定一个格式化字符串
以及可以指定一个Header参数,做为日志开头的字符串,Footer来指定结尾字符串
这里有一个小技巧,日志中开头和结尾总想产生回车符吧,虽然logger在写入一条日志会自动回车,可是Header和FOOTER却不会,咋办?用\n\r吗?(我从别人的BLOG上看到过)经实践,\n\r会原样定改日志,根本不会转换.其实,我们可以用XML实体呀,使用
就可以在指定位置插入一个回车换行符了
最后,像log4net的文档中说的那样,如果你不想你的日志文件变得很大,使读写的性能下降的话,建议你还是分级管理日志,把粒度变小点,也就是说,除了定义ROOT外,最后,对每一个模块或每一个实体,依据用途,目的,定义各自的LOGGER配置,这样的好处是日志被分散了,日志文件增长就没那么快了.每一个LOGGER的结构跟ROOT是一模一样的,这里不再叙述了.像前面说的那样,如果你相让日志产生层级关系,你可以跟他们的NAME属性像C#中的namespace那样命名就可以了
要说明的是,LOGGER的定义是非必须的,只是一种建议罢了,Log4net的配置中,除了必须定义一个ROOT和一个APPENDER外,其他的都是可选的
另一种配置log4net的方法,是在单独的XML文件中配置,这个时候,只要把log4net标记中的内容复制过来就行了,不需要configSections
3,在应用程序代码中读取配置
这一步非常简单,你可以在应用程序集的assemblyInfo.cs文件中读取log4net配置
对于WINFORM应用程序,你可以加入
[assembly:log4net.Config.DOMConfigurator()]或
[assembly:log4net.Config.XmlConfigurator()]
对于WEBFORM你可以加入
[assembly:log4net.Config.DOMConfigurator(ConfigFile="web.config",Watch=true)]
注意:如果使用NUNIT测试的朋友,要用生成后事件,copy "$(ProjectDir)app.config" "$(TargetPath).config"
4.在应用程序中获取ILog对象
在需要使用LOGGER功能的类中,引入log4net空间,为类加入静态只读成员(静态的目的是只用一个对象,只读是防止误改)
private static readonly ILog logger=LogManager.GetLogger(typeof(类))
这里就可以获取配置文件中与类名同名的LOGGER对象了
5,写入日志
很简单 logger.Deub(写入的内容)
其他的还有info,warn,error等,很容易理解的
发表评论
-
用UpDataPanel实现同步提交显示数据
2007-06-08 12:55 687这是我来博客园发的第一篇文章做这个的灵感来自TerryLee的 ... -
Ajax的实现原理(asp.net ajax读书笔记)
2007-06-08 15:07 1171首次加载方式:与传统web应用程序相同。首先用户在游览器输入U ... -
ASP.net自己常用的一些代码[新同学请进]
2007-06-09 01:46 6731.如何在Reapter控件里显示数据库数据?页面部分代码: ... -
SQL Server 2005 For Developers
2007-06-09 18:33 608很多朋友最近在找SQL2005开发版下载的地址,苦于BT下载无 ... -
[原创]Asp.net入门-网络采购系统(1)
2007-06-10 16:14 603大家好,首先欢迎您访问我的博客,在这儿,您如果是一名Asp.n ... -
用Jmail实现邮件发送源代码
2007-06-12 10:53 775以下代码经过测试,没有问题的,可以实现邮件发送。JMail下载 ... -
asp.net利用RAR实现文件压缩解压缩[转载]
2007-06-13 23:22 738如果服务器上安装了RAR程序,那么asp.net可以调用RAR ... -
利用Jmail接收邮件
2007-06-16 00:06 1350/**//// <summary>/// 利用Jm ... -
C#基础概念二十五问[转载]
2007-06-16 10:31 665当初学 C# 时是找个人大概问了一下数据类型和分支语句就开始做 ... -
C# 开发和使用中的23个技巧
2007-06-19 20:39 6171.怎样定制VC#DataGrid列标题? DataGrid ... -
数据库开发者常犯的十大错误,你有吗?
2007-06-21 00:03 745尽管软件发展中的热点技术层出不穷,不断地变化,有一些东西却一 ... -
Net 是未来的趋势, 为什么? [转]
2007-06-23 00:41 514Net姗姗来迟了.但是终于 ... -
使用ADO.NET和C#以编程方式创建 SQL Server 数据库
2007-09-28 15:04 857//Create Button on Form //using ... -
使用ISAPI_Rewrite对asp.net实现URL重写伪静态[转]
2008-04-19 01:08 967ISAPI_Rewrite利用IIS的ISAPI实现URL重写 ... -
利用Mircosoft URLRewriter.dll实现页面伪静态[原]
2008-04-20 01:40 1592昨天,转贴了一篇利用ISAPI筛选器来实现URL伪静态的文章, ... -
[原]利用Wildcard ISAPI Mapping隐藏扩展名
2008-04-23 17:43 725Wildcard ISAPI Mapping,是IIS6中的一 ...
相关推荐
log4net是.Net下一个非常优秀的开源日志记录组件。log4net记录日志的功能非常强大。它可以将日志分不同的等级,以不同的格式,输出到不同的媒介。本文主要是介绍如何在Visual Studio2008中使用log4net快速创建系统...
配置Log4net.config <log4net OverdueDays="10"> 可以删除指定多少天数前的日志文件,不配默认7天,每24小时自动清一次
用户可以从http://logging.apache.org/log4net/下载log4net的源代码。解压软件包后,在解压的src目录下将log4net.sln载入Visual Studio .NET,编译后可以得到log4net.dll。用户要在自己的程序里加入日志功能,只需将...
log4net 日志类封装 log4net 日志类封装
net6 控制台+ log4net+写数据库+自定义字段
log4net库是一个工具,可帮助程序员将日志语句输出到各种输出目标。log4net是优秀的Apache log4j™框架到Microsoft®.NET运行时的移植。我们利用.NET运行时中的新功能,使该框架在本质上与原始log4j相似。 log4net是...
log4net 从1.0到4.5
资源包含log4net配置过程详细图解文档、Demo、插件,其中log4net配置过程详细图解文档包含插件简介、下载、引入VS2010、配置、使用、总结
net core5 Log4Net 全局注册,日志使用
log4net库是Apache log4j框架在Microsoft .NET平台的实现,是一个帮助程序员将日志信息输出到各种目标(控制台、文件、数据库等)的工具。 log4net是Apache软件基金会Apache Logging Services工程的一部分。Apache...
Log4Net使用指南 声明:本文内容主要译自Nauman Leghari的Using log4net,亦加入了个人的一点心得(节3.1.4)。 请在这里下载示例代码 1 简介 1.1 Log4net的优点: 几乎所有的大型应用都会有自己的用于跟踪调试...
log4net(Log For Net)是Apache开源的应用于.Net框架的日志记录工具,详细信息参见Apache网站.它是针对Java的log4j(Log For Java的)姊妹工具.用过log4j的都知道,它功能强大,可配置性灵活,线程安全,对日志的输出管理和...
WinForm Log4Net 配置和使用实例,完整的实例。有注释和说明。新手完全能看懂。
log4net,可以根据配置的时间长度,实现了自动删除过期的日志文件,欢迎大家使用或者分享更科学的方法。
使用Log4net自定义信息(变量或属性或字段)存入数据库,支持log4net1.2.10
C# 使用Log4Net记录日志
wpf 使用log4net ,可以每天生成一个日志文件。自己网上找了半天,没合适的,写了一个。
使用Log4net发送日志邮件实例
内容包括log4net.dll 和封装类以及配置文件,日志输出目录可在配置文件中自定义。
Log4Net自带配置文件实例讲解