[.Net MVC] 使用 log4net 日志框架
项目:后台管理平台
意义:项目开发中提出增加日志功能,对关键的操作、程序运行中的错误信息进行记录,这对程序部署后的调试有很大意义。
注:本文只是对网上搜集的信息进行了整合,以备今后查询。
关键字:.NET MVC,LOG4NET
一、最快速的上手步骤
1.用 NuGet来添加log4net
2.在项目根目录下的Web.config中添加节点。在 <configSections> 节点下添加对log4net的引用,
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
</configSections>
新增 <log4net> 节点,配置log4net,
<log4net>
<appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
<file value="C:\Temp\log4net.log" />
<appendToFile value="true" />
<maximumFileSize value="500KB" />
<maxSizeRollBackups value="2" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %level %logger - %message%newline" />
</layout>
</appender>
<root>
<level value="All" />
<appender-ref ref="RollingFile" />
</root>
</log4net>
log4net提供了非常强大的控制策略,例如,可以控制输出日志输出格式、页眉页脚、覆盖策略、安全控制等。上面这个例子中的配置就是要添加一个appender并且把所有类型的信息都放在 C:\Temp\log4net.log。在实际的项目中,应该使用更多更详细的配置信息.。比如,可能需要把 ERROR 或 FATAL 级别的信息发送给系统管理员。
3.编辑并且添加以下内容到Global.asax.cs,让log4net去读取这个XML配置。
protected void Application_Start()
{
log4net.Config.XmlConfigurator.Configure();
}
4.为了测试这个log4net日志,在HomeController.cs 文件里添加以下内容。先创建日志记录组件实例,
private static readonly log4net.ILog log = log4net.LogManager.GetLogger(typeof(HomeController));
记录调试信息。
public ActionResult Index() {
log.Debug("HomeController.Index() was called");
return Index();
}
5.启动程序后浏览Home page,log4net会创建 C:\Temp\log4net.log 文件,并且为每个请求添加以下日志信息:
2015-07-20 09:53:14,682 DEBUG MyCompany.WebUI.Controllers.HomeController - HomeController.Index() was called
二、有关配置的详细说明
通过上面的例子,可以快速配置并使用log4net,从使用过程中,发现使用的关键在于对log4net的配置,也就是在Web.config文件里的<log4net>节点。下面对此节点下的重要配置进行介绍。
1.<appender>
每个<appender>子节点代表一种记录日志的方式(仅在这里配置了不代表启用了)。
具体说来有如下Appender:
AdoNetAppender:利用ADO.NET记录到数据库的日志。
AnsiColorTerminalAppender:在ANSI 窗口终端写下高亮度的日志事件。
AspNetTraceAppender:能用asp.net中Trace的方式查看记录的日志。
BufferingForwardingAppender:在输出到子Appenders之前先缓存日志事件。
ConsoleAppender:将日志输出到控制台。
EventLogAppender:将日志写到Windows Event Log。
FileAppender:将日志写到文件中。
LocalSyslogAppender:将日志写到local syslog service (仅用于UNIX环境下).
MemoryAppender:将日志存到内存缓冲区。
NetSendAppender:将日志输出到Windows Messenger service.这些日志信息将在用户终端的对话框中显示。
RemoteSyslogAppender:通过UDP网络协议将日志写到Remote syslog service。
RemotingAppender:通过.NET Remoting将日志写到远程接收端。
RollingFileAppender:将日志以回滚文件的形式写到文件中。
SmtpAppender:将日志写到邮件中。
TraceAppender:将日志写到.NET trace 系统。
UdpAppender:将日志connectionless UDP datagrams的形式送到远程宿主或以UdpClient的形式广播。
项目中考虑使用RollingFileAppender方式:(控制日志文件大小的问题)对于一个长时间使用并且有大量业务日志的系统来说,如果使用FileAppender将日志一直记录到一个文件中会引起性能低下的问题,在这种情况下可考虑使用RollingFileAppender循环记录日志,指定文件的最大长度,如果超过了就重新生成一个文件,如下面的配置:
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="RollingFileAppender_log.txt" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="100KB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] (%file:%line) %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
在上面的配置中,每个日志文件最大100KB,最大日志文件个数是10,生成的日志文件名会是RollingFileAppender_log.txt.1, RollingFileAppender_log.txt.2 ... RollingFileAppender_log.txt.10,如果记录的日志超过10个,会从RollingFileAppender_log.txt.1开始覆盖。
还有一种方式就是按照日期记录日志,它的配置如下:
<appender name="RollingLogFileAppender_DateFormat" type="log4net.Appender.RollingFileAppender">
<file value="RollingLogFileAppender_DateFormat_log.txt" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<!--<datePattern value="yyyyMMdd-HHmm" />-->
<datePattern value="yyyyMMdd" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread](%file:%line) %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
每天的日志写入到一个文件中,当天的日志文件名为“RollingLogFileAppender_DateFormat_log.txt”,非当天的日志都会带上当天的日期,如“RollingLogFileAppender_DateFormat_log.txt20101117”表示2010年11月17日的日志,方便地区分和查找。
2.<root>
关闭和启用日志,可以在<root>进行配置,如下就是一个例子:
<root>
<!--文件形式记录日志-->
<appender-ref ref="LogFileAppender" />
<!--控制台控制显示日志-->
<appender-ref ref="ConsoleAppender" />
<!--Windows事件日志-->
<!--<appender-ref ref="EventLogAppender" />-->
<!--SQLite事件日志-->
<appender-ref ref="AdoNetAppender_SQLite" />
<!--RollingFileAppender事件日志-->
<appender-ref ref="RollingFileAppender" />
<!--RollingFileAppender事件日志,每天一个日志-->
<appender-ref ref="RollingLogFileAppender_DateFormat" />
<!-- 如果不启用相应的日志记录,可以通过这种方式注释掉
<appender-ref ref="AdoNetAppender_Access" />
-->
</root>
增加日志输出目的地,可以增加<appender-ref>节点,注意后面的ref是appender name,如果想要取消,删除或者注释掉这行就可以。
<root> 下的 <level value="All" /> 标签设置允许记录日志的级别。一共有七个级别,其中2至6可以在代码中调用,
- OFF
- FATAL
- ERROR
- WARN
- INFO
- DEBUG
- ALL
<root> 下的 <layout> 标签设置日志数据记录格式。 <layout> 下的子标签设置具体的格式
%date
- 输出本地时区下的日期,可以使用格式%date{MMMM dd, yyyy HH:mm:ss, fff}输出"January 01, 2011 14:15:43, 767"%utcdate
- 输出世界时间%exception
- 传入异常信息时,在异常后添加新的一行,没有异常传入时,不显示%level
- 记录的事件级别%message
- 用户传入的信息%newline
- 换行%timestamp
- 时间戳,程序运行以来的毫秒数%thread
- 调用接口的线程名或线程号
下面的方法应该谨慎使用:
%identity
- 当前用户的名称,调用 Principal.Identity.Name 属性%location
- 在调试模式下很有用,提示日志记录方法在何处被调用%line
- 显示调用记录的行号%method
- 显示调用记录的方法%username
- 显示Windows用户,调用 System.Security.Principal.WindowsIdentity 属性
在%符号和调用的名称之间可以添加数值,使每条信息有固定的宽度:
X
- 设置最小字符数。如果信息宽度小于设置字符数,在字符左边会填充空格,例如,%10message显示
"hi
"-X
- 功能和上面的相同,空格会填充在右边,例如,%-10message显示
"hi
".X
- 设置最大字符数,如果信息超过设置值,砍断字符串的开头部分,例如,%.10message显示
"rror entry
",如果传入的是"Error entry
"
三、在程序中使用
目前只是在需要日志记录的地方调用函数,log4net的日志记录函数也很简单,
void Info(object message);
void Info(object message, Exception exception);
函数的名称是日志级别,Error、Fatal、Info、Debug、Warn,参数有传入的信息字符串,和异常信息。
以上内容整理自互联网,下面的链接,方便日后查询
http://www.cnblogs.com/anderslly/archive/2007/03/09/log4netconfigsamples.html
[.Net MVC] 使用 log4net 日志框架的更多相关文章
- log4net 日志框架的配置
log4net 日志框架的配置——静态文件(一) 添加对log4net程序集的引用 选择程序集文件添加引用即可,需要注意的是需要添加相应程序版本的程序集,如果你的应用是基于.netFramework2 ...
- asp.net core 集成 log4net 日志框架
asp.net core 集成 log4net 日志框架 Intro 在 asp.net core 中有些日志我们可能想输出到数据库或文件或elasticsearch等,如果不自己去实现一个 Logg ...
- Spring MVC整合logback日志框架实战
1.引入依赖,本项目maven构建,普通项目导入想要的jar包即可 版本 <properties> <slf4j-api.version>1.7.7</slf4j-api ...
- 第一节:框架前期准备篇之Log4Net日志详解
一. Log4Net简介 Log4net是从Java中的Log4j迁移过来的一个.Net版的开源日志框架,它的功能很强大,可以将日志分为不同的等级,以不同的格式输出到不同的存储介质中,比如:数据库.t ...
- WebAPI异常捕捉处理,结合log4net日志(webapi框架)
一:异常捕捉处理 首先,在我们需要区分controller的类型.是全部基层controller,还是Apicontroller.(当然一般API框架,用的都是Apicontroller).两者异常处 ...
- 日志框架对比 NLog VS Log4net
Log4net 先说Log4net,它是.net平台上一个老牌的日志框架,我接触的时间也不长(因为公司有自己的日志库),但是看着各开源库都在用这个于是前段时间也尝试去了解了一下. 首先让我认识到Log ...
- ELK日志框架(2):log4net.ElasticSearch+ Kibana实现日志记录和显示
环境说明 1. windows server 2012 R2 64位 2. log4net.ElasticSearch 3. kibana-5.5.0-windows-x86.zip 架构说明 数据采 ...
- ASP.NET MVC中Log4Net记录错误日志的使用
第一.在管理NuGet程序包 =>下载 Log4Net 第二.在web.config配置Log4Net 1:在<configuration>节点下 <configSection ...
- Moon转告给你一个比Log4net更好日志框架--TracerX Logger 及其对应的日志查看器
一.介绍 TracerX logger是一个易于上手,且拥有众多高级特性的.NET日志框架. 它能够发送输出结果到多目的地(循环文件.事件日志等....).它也能生成文本和二进制文件.它拥有一个强大的 ...
随机推荐
- 【P3O是什么】P3O认证之项目组合、项目群和项目办公室
如何区分项目组合办公室与项目群和项目办公室? P3O®(Portfolio,Programmed and Project Offices-项目组合.项目群和项目办公室)是由英国商务部 OGC 于200 ...
- 关于 javascript:void(0) 的使用
在 Wep App 中,我们经常需要在 JavaScript 中处理链接的点击.因此,我们希望用户点击 <a> 元素时阻止它的默认行为.此时我们可以用很多不同的方法来处理.例如: < ...
- Clarkson不等式
- PrintJ的设计模式之旅——1.模式之父
好奇设计模式的源头,做了一番搜索和调查,于是便开启了这个系列“PrintJ的设计模式之旅”. 1.模式之父 GOF(Gang of Four) Erich Gamma.Richard Helm.Ral ...
- Graph(2014辽宁ACM省赛)
问题 F: Graph 时间限制: 1 Sec 内存限制: 128 MB 提交: 30 解决: 5 [cid=1073&pid=5&langmask=0" style=& ...
- C#系列之String和StringBuilder
前言 首先和博园的各位打声招呼,小弟在博园呆了也有一年多了.平常一有时间就会过来看看文章,学习各位的经验,现在养成了一种一天不来博园,心里就不踏实的习惯,不知道在看我博文的大哥们有没有这个感觉. 读归 ...
- 详解Android ActionBar之二:ActionBar添加Tabs标签和下拉导航
本节主要讲解ActionBar如何添加Tabs标签和下拉导航. 一.添加标签 Tabs 在ActionBar中实现标签页可以实现android.app.ActionBar.TabListener ,重 ...
- iOS开发——Swift篇&单例的实现
Swift实现单例模式 Swift实现单例模式 由于Swift语言弱化了struct和class之间的界限,这里我分别给出自己写的两种的单例实现 class版本: class SwiftSinglet ...
- 设计模式 - 命令模式(command pattern) 多命令 具体解释
命令模式(command pattern) 多命令 具体解释 本文地址: http://blog.csdn.net/caroline_wendy 參考命令模式: http://blog.csdn.ne ...
- [Effective C++ --007]为多态基类声明virtual析构函数
引言: 我们都知道类的一个很明显的特性是多态,比如我们声明一个水果的基类: class Fruit { public: Fruit() {}; ~Fruit(){}; } 那么我们根据这个Fruit基 ...