log4net 总结
说实话,我并不是太想写这篇文章,因为我承诺过要完成博客园的部分功能,所以一直都在积极的利用下班时间来完善这个系统, 但是我又不想让看我源代码的朋友不知道我写的代码是什么意思,所以我还是单独写一个文章,叙述一下我对管理日志的看法, 当然主要是log4net的使用。为了写这篇文章,我查看了博客园的很多关于log4net的文章,但是结果令我很不满意,因为他们对于log4net的介绍基本上都是大同小异, 我不敢说他们写的有错,因为确实就是那么写的,但是为什么我还要写这篇博客呢,因为我想以一个学习者的心态来分析这个框架结构,而不是以一个老师来分析。 从一个学习者到老师需要很多的路要走的,他们都省略了学习者入门时的困难,所以我决定还是来写一篇博客来叙述一下。希望大家吐槽。
首先,现在系统越来越复杂,并且集成的模块也越来越多,在测试系统的时候我们可以利用单元测试(有单元测试框架支持,比如nunit等), 还可以通过认为的点击来测试系统功能的正常,在开发过程中我们可以测试出来很多的问题。但是在系统已经部署到服务器上以后,我们就不能进行单元测试了, 因为部署到服务器上的不是源码,当然也有其他的方式可以测试系统bug,但是在实际环境中会出现很多令人意想不到的问题。举个简单的例子,虽然我们会在系统中进行异常的捕获, 并且会显示特定的错误信息,但是错误信息是对用户显示的,我们开发者当然希望知道错误的详细信息,以便我们可以改正错误。这是必须的,所以最简单也最直接的方式就出现了, 就是记录系统日志,当然如果不采用log4net日志管理框架,我们也是可以通过文件操作来写入日志,但是这个不便于配置。正如我听到的一个老师说的, 如果你的系统要进行扩展,那么你会怎么办?这是当时很令我头疼的一个问题,但是我现在基本知道思路,就是采用分层开发模式,将不同的层放到对应的类库中, 另外我们也可以采用IOC(依赖注入)或者Nhibernate等框架来提高系统的灵活性。
废话太多,大家都会没有耐心看下去,但是如果这是代码,我估计大家更不会看下去。呵呵
因为园子里有很多介绍log4net的介绍,所以我就不详细的介绍了,我只说我个人认为在开发中是重点的,欢迎大家吐槽~~
我们知道log4net有一个姐妹叫log4j,他们是针对.Net和java开发的两个结构基本相同的框架结构, 看到这种说法,我一直想说,为什么好的框架都会从java移植而来,并且都是apache这个组织开发的呢?这里面也不是我能理解的,我也是吐槽一下。
log4net主要由Appender,Logger,Filter,Layout和一个Object Render组成。
其中
Appender(附着器)主要用来确定日志记录的位置,也可以这么说就是确定日志是记录到数据库还是文件或其他终端。
Logger(记录器),记录器 看字面意思就应该可以猜到他就是用来确定要发送的日志信息。比如说,有一个异常发生,我们需要记录什么数据,都是由Logger负责的。
Filter(过滤器) 可以这么理解,这个和MVC中的Filter还是有差别的,这里的Filter表示的是过滤,就像筛子 可以过滤一样,而MVC中的Filter也可以叫做过滤器,但是它更多的是完成
Aop(面向切面或面向方面) 的横向的过滤导向,也可以认为是对某个Action或Controller施加的限制。
Layout(布局) 布局很容易理解,就像装修一样,把我们要记录的数据整理成我们需要的格式。
至于后面的object render,我在官方文章看了一下,个人理解就相当于渲染输出,就像服务器发送html到浏览器以后,浏览器要渲染输出的效果应该是一样。
简单的描述了一下log4net的组成,还有很重要的就是log4net的分级,其中log4net一种氛围5级,按从高到低的顺序依次为:
off>fatal>Error>Warn>Info>Debug>All
看到这个分级,大家一定要骂我了,一共有七个值,偏偏说5个分级,这里我解释一下,off的意思就是关闭log4net的日志输出,
fatal的级别最高,表示的就是特别严重的错误,一般是在应用程序崩溃的时候,而error则是表示错误出现,一般用在出现了异常以后,
Warn表示警告,这个不会使程序出现异常,但是可能会影响程序性能,info 和debug则可以随意了。另外all表示的就是所有的分级都可以满足。
这里大家要注意一下的就是,这个分级是会影响程序日志输出的。比如说你在程序中定义了 log.Info(message) 和log.debug(message),但是你定义的日志应当输出的级别是info,很抱歉
的告诉你,log.debug(message)中的信息不会写入日志,因为debug在顺序中是小于info的。
说了log4net中最重要的两个部分,现在就需要正式的启用log4net来输出日志信息了,签于园友们都有很详细的配置信息,所以我就把主要的两个简单的描述一下,如果有需要我会在注释中
写入的。在项目中我们一般会用到输出日志到文件或者数据库中,这两种方式,我个人也非常喜欢这两种方式。一般我会把日志同时输出到文件和数据库中,虽然会有一点的性能损失,但是对于
日志的完整性还是十分值得的,当然输出的日志越少性能会越高,大家都懂得。
log4net是支持配置文件来更改其输出方式的,我们可以把配置文件放到项目配置文件web.config或winform的app.config中,也可以单独的放到固定的配置文件中,现在我们把配置文件放
到项目配置文件中。
配置文件如下
1 <configSections>
2 <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/><!--配置一个结点 名称为log4net-->
3 </configSections>
4 <log4net debug="true">
5 <appender name="LogFileAppender" type="log4net.Appender.FileAppender" > <!--定义的是日志记录到文件的附着器 name表示该附着器的名称-->
<!--在log4net中还有一个附着器RollingFileAppender 它表示会循环生成很多文件,举例来说,就是设置一共可以生成20个文件,每个文件的大小为2K,那么如果第一个-->、
<!--文件的大小超过2K,就会自动创建一个按顺序命名的文件-->
6 <param name="File" value="c:\Log\DBLog.txt" /> <!--日志记录的存在路径-->
7 <param name="AppendToFile" value="true" /><!--为true就表示日志会附加到文件,为false,则会重新创建一个新文件-->
8 <layout type="log4net.Layout.PatternLayout"><!--输出内容控制-->
9 <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" />
10 </layout>
11 </appender>
12 <appender name="SmtpAppender" type="log4net.Appender.SmtpAppender"><!--设置发送电子邮件的附着器-->
13 <authentication value="Basic" />
14 <to value="guozhiqi@babaike.com" />
15 <from value="guozhiqi21@163.com" />
16 <username value="guozhiqi21" />
17 <password value="password" />
18 <subject value="测试错误信息显示" />
19 <smtpHost value="smtp.163.com" />
20 <bufferSize value="512" />
21 <lossy value="true" />
22 <evaluator type="log4net.Core.LevelEvaluator">
23 <threshold value="debug"/>
24 </evaluator>
25 <layout type="log4net.Layout.PatternLayout">
26 <conversionPattern value="%newline%date [%thread] %-5level %logger [%property{NDC}] - %message%newline%newline%newline" />
27 </layout>
28 </appender>
29 <!--<logger name="smtp">
30 <level value="debug"/>
31 <appender-ref ref="SmtpAppender"/>
32 </logger>-->
33 <appender name="ADONetAppender" type="log4net.Appender.ADONetAppender"><!--存储到数据库的操作-->
34 <bufferSize value="10"/>
35 <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
36 <connectionString value="server=192.168.1.66;database=教学;user id=sa;password=sa1234"/>
37 <commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date,
@log_thread, @log_level, @log_logger, @log_message, @log_exception)"/>
38 <parameter>
39 <parameterName value="@log_date"/>
40 <dbType value="DateTime"/>
41 <layout type="log4net.Layout.RawTimeStampLayout"/><!--可以认为是记录日志的时间-->
42 </parameter>
43 <parameter>
44 <parameterName value="@log_thread"/>
45 <dbType value="String"/>
46 <size value="255"/>
47 <layout type="log4net.Layout.PatternLayout">
48 <conversionPattern value="%thread"/><!--记录日志时的线程号-->
49 </layout>
50 </parameter>
51 <parameter>
52 <parameterName value="@log_level"/>
53 <dbType value="String"/>
54 <size value="50"/>
55 <layout type="log4net.Layout.PatternLayout">
56 <conversionPattern value="%level"/><!--日志级别-->
57 </layout>
58 </parameter>
59 <parameter>
60 <parameterName value="@log_logger"/>
61 <dbType value="String"/>
62 <size value="255"/>
63 <layout type="log4net.Layout.PatternLayout">
64 <conversionPattern value="%logger"/><!--哪个记录器存储的该日志-->
65 </layout>
66 </parameter>
67 <parameter>
68 <parameterName value="@log_message"/>
69 <dbType value="String"/>
70 <size value="4000"/>
71 <layout type="log4net.Layout.PatternLayout">
72 <conversionPattern value="%message"/><!--日志信息-->
73 </layout>
74 </parameter>
75 <parameter>
76 <parameterName value="@log_exception"/>
77 <dbType value="String"/>
78 <size value="255"/>
79 <layout type="log4net.Layout.ExceptionLayout"/><!--异常信息-->
80 </parameter>
81 </appender>
82 <appender name="RollingFile" type="log4net.Appender.RollingFileAppender"><!--这个就是我在上面提到的RolllingFileAppender-->
83 <file value="example.log" /><!--文件名称-->
84 <appendToFile value="false" /><!--会创建新文件,一般设置为true,这里设置为false,是为了看到创建的文件-->
85 <maximumFileSize value="1KB" /><!--文件大小-->
86 <maxSizeRollBackups value="20" /><!--创建最大文件数-->
87 <layout type="log4net.Layout.PatternLayout">
88 <conversionPattern value="%level %thread %logger - %message%newline" />
89 </layout>
90 </appender>
91 <!--<logger name="rolling">
92 <level value="fatal"/>
93 <appender-ref ref="RollingFile"/>
94 <appender-ref ref="ADONetAppender"/>
95 </logger>-->
96 <root>
97 <level value="info" />
98 <appender-ref ref="ADONetAppender" />
99 <appender-ref ref="SmtpAppender"/>-->
100 <appender-ref ref="LogFileAppender"/>
101 <appender-ref ref="ColoredConsoleAppender"/>
102 <appender-ref ref="EventLogAppender"/>
103 <append-ref ref="NetSendAppender"/>
104 <appender-ref ref="RollingFile"/>
105 </root>
106 </log4net>
在配置文件创建好了以后,按道理说就可以在程序中使用log4net了,创建Log4NetController,在该控制器中进行对log4net的测试
1 public class Log4netController : Controller
2 {
3
4 private static readonly log4net.ILog log = log4net.LogManager.GetLogger("rolling");
5
6 public ActionResult Index()
7 {
8 log4net.Config.XmlConfigurator.Configure();
9
10 log.Info("log日志信息");
11 log.Debug("debug信息");
12 log.Error("error信息");
13 log.Warn("warn信息");
14 Exception ex = new Exception("这里显示的是异常信息");
15 log.Fatal("fatal信息", ex);
16 return View();
17 }
18
19 }
运行程序,就可以在数据库中看到日志生成的记录
aaarticlea/png;base64,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" alt="" />
说明log4net的日志记录到数据库是正确的。下面我们来分析一下,因为我是在把代码复制到博客中才加的注释,所以不是C#标准的注释方式,
下面我们来把使用log4net中要注意的地方或者我认为是会令人疑惑的地方叙述一下,
其实我们在配置log4net的时候最好是直接复制原来可以运行的配置文件,然后进行修改,因为如果你的配置文件有一点错误,那么log4net都不会正常工作的,
这里还有一个更严重的问题就是我们不会得到log4net引发的任何异常。我们只能是慢慢修改,有耐心,最好是复制 粘贴
<!--<logger name="rolling">
92 <level value="fatal"/>
93 <appender-ref ref="RollingFile"/>
94 <appender-ref ref="ADONetAppender"/>
95 </logger>-->
96 <root>
97 <level value="info" />
98 <appender-ref ref="ADONetAppender" />
99 <appender-ref ref="SmtpAppender"/>-->
100 <appender-ref ref="LogFileAppender"/>
101 <appender-ref ref="ColoredConsoleAppender"/>
102 <appender-ref ref="EventLogAppender"/>
103 <append-ref ref="NetSendAppender"/>
104 <appender-ref ref="RollingFile"/>
105 </root>
这段代码中的root和logger结点我们需要注意一下,因为在root中定义的是针对所有的logger,也就是说如果你在程序中使用的不是LogManager.getLogger(Loggername)这种方式,那么你默认的会使用root结点的配置信息来记录日志,而如果你使用了这种方式,那么就会使用对应的logger结点的配置信息。
3.log4net是可配置、可修改的灵活日志输出,我们必须在程序中对log4net进行配置。
log4net.Config.XmlConfigurator.Configure(); 这个是默认的配置方式,当然我们也可以利用参数中加入配置文件路径来指定配置文件。这个是必须要配置的,切记。
还有就是这个配置应当是在程序启动时就需要配置完成,因此在application_start中是比较好的方法。
4.log4net输出日志的时候我们看到了很多的%形式,这是表示的什么意思呢?其实%thread 就是表示当前的线程名称,%level就是表示日志的级别。
5.最后我还想补充一下,任何和程序执行无关的代码都会影响程序的性能,日志的输出和程序功能的完成没有直接的关系,过多的日志输出会影响程序响应的性能,另外我们要控制删除日志的级别,以便不要任何日志信息都会输出。
6.通过 private static readonly log4net.ILog log = log4net.LogManager.GetLogger("rolling"); 可以的到一个log对象,但是我们如何确定是否需要输出到对应的级别呢?
log4net提供了
aaarticlea/png;base64,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" alt="" />
我们可以通过这几个属性来判断是否需要输出不同级别的日志。
暂时想到的就这么多,我想到别的还会加上,欢迎吐槽 补充一下:
1 <appender name="RollingLogRootFileAppender" type="log4net.Appender.RollingFileAppender">
2 <!--日志的路径-->
3 <file value="..\temp\log\Winlog" />
4 <!--是否覆盖,默认是追加true-->
5 <appendToFile value="true"/>
6 <!--文件滚动周期(每日创建新日志文件)-->
7 <datePattern value="yyyyMMdd".txt""/>
8 <!--设置无限备份=-1 ,最大备份数为1000-->
9 <maxSizeRollBackups value="1000"/>
10 <!--名称是否可以更改为false为可以更改-->
11 <staticLogFileName value="false" />
12 <!--文件滚动选项Composite表示根据日期和大小来滚动-->
13 <rollingStyle value="Composite" />
14 <layout type="log4net.Layout.PatternLayout">
15 <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss}[%t][%-5p][%c]%m%n%exception%n" />
16 </layout>
17 </appender>
这个可以用来对RolingFile进行更好的控制
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"将日志信息输出到一个单一的文件中,随着应用程序的持续使用,该日志文件会 ...
随机推荐
- [Python]linux自己定义Python脚本命令
在window下写好的程序配置到Linux上,要实现随意文件夹下的命令调用. 因为初学Linux,这里从文件传输等最主要的方法入手,记录配置的过程中遇到的各种问题. 连接远端server 这里使用pu ...
- [Effective C++ --009]确定对象被使用前已先被初始化
在确保对象在使用前已先被初始化这一条款的编码实践中,作者为我们总结了三条经验,它们分别是: ------------------------------------------------------ ...
- Preparing for Different Databases
Preparing for Different Databases In the previous chapter, we created a PostRepository that returns ...
- springMVC学习笔记三
十三.springMVC和spring集成 配置文件,spring的配置路径applicationContext.xml 在默认的web-inf下面 strut的配置文件默认在src下面 用了什么框架 ...
- 手把手教你使用UICollectionView写公司的项目
在很多app中都有这样通用的页面,一直没有机会使用UICollectionView,只是简单的看过他的使用方法.今天公司美工出图,使用了他,并且遇到了好多的坑.记录一下过程,不确定使用的方法是不是最优 ...
- 关于Git的暂存区这个概念的理解.
Git中的暂存区成为stage或者是index.可以理解成一个"提交任务".Git暂存区是Git最成功的设计之一,但是也是最难理解的. 暂存区是一个介于工作区和版本库的中间状态.当 ...
- 关于Git中分支merge和rebase的适用场景及区别
最近刚接触Git,下面对一些基本的使用做一下总结. 本文是转载于CSDN:http://blog.csdn.net/rryqsh/article/details/8230560 几乎所有的版本控制工具 ...
- 输入参数varargin
一种特别的输入参数varargin 可以在自定义函数中得到,这种函数支持输入参数的变量的个数.这个参数显在输入参数列表的最后一项,它返回一个单元阵列,所以一个输入实参可以包括任意数目的实参.每一个实参 ...
- 基于Selenium2+Java的UI自动化(1) - 原理和环境搭建
一.Selenium2的原理 Selenium1是thoughtworks公司的一个产品经理,为了解决重复烦躁的验收工作,写的一个自动化测试工具,其原理是用JS注入的方 式来模拟人工的操作,但是由于J ...
- Leetcode 104. Maximum Depth of Binary Tree(二叉树的最大深度)
Given a binary tree, find its maximum depth. The maximum depth is the number of nodes along the long ...