项目:后台管理平台
意义:项目开发中提出增加日志功能,对关键的操作、程序运行中的错误信息进行记录,这对程序部署后的调试有很大意义。
注:本文非原创,只是对网上搜集的信息进行了整合,以备今后查询。
一、最快速的上手步骤
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