`
阅读更多

本文不是教你全面了解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等,很容易理解的

分享到:
评论

相关推荐

    log4net-2.0.8-src_log4net源代码_log4net_

    《深入解析log4net:基于源代码的洞察》 log4net是一款强大的日志记录...log4net-2.0.8-src.zip和log4net-2.0.8文件包含了log4net的源代码和编译后的库,对于想要学习和研究log4net的开发者来说,是一份宝贵的资源。

    Log4net详细说明使用

    Log4net是一个强大的开源日志记录组件,广泛应用于.NET框架中。它提供了丰富的日志管理功能,能够将日志信息按不同级别分类,并以多种格式输出到不同的目标,如文件、控制台、数据库等。使用Log4net可以方便地监控和...

    C# log4net自动删除多少天前的log文件

    在IT行业中,日志管理是系统监控和故障排查的关键环节,尤其在使用.NET框架开发应用程序时,C#的log4net库是一个非常流行的日志记录工具。log4net以其灵活性和强大的功能,允许开发者轻松地配置日志输出,包括日志...

    c#版本 Log4Net2.0.8版本,包含自己优化组件源码(真Log4Net)

    **Log4Net 2.0.8 知识点详解** Log4Net 是一个流行的、开源的日志记录框架,由 Apache 软件基金会开发,主要用于.NET Framework 和 .NET Core 应用程序。这个框架提供了丰富的日志记录功能,允许开发者以灵活的方式...

    WinForm Log4Net 配置和使用实例

    Log4Net是Apache组织提供的一款强大的、灵活的日志框架,广泛应用于C#项目中,包括WinForm应用。本实例将详细介绍如何在WinForm应用中配置和使用Log4Net。 首先,我们要理解Log4Net的基本概念。Log4Net提供了一个可...

    log4net配置详细图解+Demo

    &lt;section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /&gt; ``` - 然后,在配置节内定义日志输出的目标(appender)和日志级别(level),例如输出到控制台: ```xml ...

    log4net自动删除日志文件实现

    在.NET项目中使用log4net,需要引用`log4net.dll`库。可以通过NuGet包管理器安装,也可以直接从Apache官方网站下载。添加引用后,在程序启动时初始化log4net配置,并通过`log4net.Config.XmlConfigurator.Configure...

    C#Winform 下使用log4net成功的例子

    &lt;section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/&gt; &lt;log4net&gt; &lt;appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"&gt; ...

    log4net。log4net

    例如,在ASP.NET Web应用中,可以在Global.asax.cs的Application_Start方法中初始化log4net,然后在代码中使用`log4net.ILog`接口记录日志。 ```csharp using log4net; private static readonly ILog log = ...

    net6 控制台+ log4net+写数据库+自定义字段

    在.NET 6框架下,构建一个控制台应用并结合log4net进行日志记录,同时将日志数据存储到数据库并支持自定义字段,是一项常见的系统监控和故障排查任务。以下将详细介绍如何实现这一功能。 首先,log4net是Apache的一...

    Log4Net .net3.5版本

    Log4Net是Apache软件基金会开发的一个开源项目,它是一个强大的日志记录框架,广泛应用于.NET平台,用于在应用程序中记录各种级别的信息,如调试、警告、错误和致命错误。.NET 3.5是一个非常流行的.NET Framework...

    Wpf log4net 日志

    &lt;section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /&gt; &lt;log4net&gt; &lt;appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"&gt; ...

    log4net源码

    **log4net源码分析** `log4net`是一款广泛使用的日志记录框架,它源自Java平台上的log4j,并被移植到了.NET环境中。这款开源库提供了强大的日志记录功能,支持多种输出方式,如控制台、文件、数据库等,且具有可...

    C# 使用Log4Net记录日志

    &lt;section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/&gt; &lt;log4net&gt; &lt;appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"&gt; &lt;layout type="log4...

    C#控制台应用使用Log4net日志

    本文将深入探讨如何在C#控制台应用程序中使用Log4net这一流行的日志框架。Log4net是Apache软件基金会的一个项目,它为.NET应用程序提供了强大的日志记录功能,具有灵活的配置和多种输出选项。 首先,我们要理解Log4...

    .Net 使用Log4Net 获取系统日志并写入数据库

    &lt;section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/&gt; &lt;log4net&gt; &lt;appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender"&gt; , System.Data, ...

    wpf log4net richtextbox

    在本文中,我们将深入探讨如何在WPF(Windows Presentation Foundation)应用程序中集成log4net库,以便实现高效、直观的日志记录功能。我们将利用RichTextBox控件来展示实时的日志信息,同时通过log4net将日志数据...

    log4net配置,日志纪录log4j的.NET版

    配置log4net通常通过XML配置文件进行,如`log4net.config`。该文件中定义了日志的Appenders(输出目的地)、Layouts(输出格式)和Loggers(日志级别)等核心元素。例如: ```xml &lt;log4net&gt; ...

    net Core 5.0 Log4Net 全局注册

    Log4Net是.NET平台上一个广泛使用的日志框架,它提供了一种灵活的方式来管理和记录应用的日志信息。本文将详细讨论如何在.NET Core 5.0项目中全局注册Log4Net,以便在整个应用中统一使用日志服务。 首先,要使用Log...

    log4net-1.2.15组件包及使用教程(c#编程)

    **log4net-1.2.15组件包及使用教程** 在C#编程中,日志记录是一项至关重要的任务,它有助于跟踪程序运行时的错误、警告和其他关键信息,以便于调试和优化。log4net是Apache软件基金会的一个开源项目,提供了一个...

Global site tag (gtag.js) - Google Analytics