[.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可以在代码中调用,

  1. OFF
  2. FATAL
  3. ERROR
  4. WARN
  5. INFO
  6. DEBUG
  7. 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

http://www.codeproject.com/Articles/140911/log4net-Tutorial

http://logging.apache.org/log4net/index.html

时间: 2024-11-10 08:18:58

[.Net MVC] 使用 log4net 日志框架的相关文章

log4net 日志框架的配置

log4net 日志框架的配置(一) 添加对log4net程序集的引用 选择程序集文件添加引用即可,需要注意的是需要添加相应程序版本的程序集,如果你的应用是基于.netFramework2.0,则应选择net 2.0版本的程序集 修改配置文件,配置log4net相关设置 在web.config或在app.config(如果没有则创建一个)中,配置log4net的使用 1 <?xml version="1.0"?> 2 3 <configuration> 4 &l

asp.net core 集成 log4net 日志框架

原文:asp.net core 集成 log4net 日志框架 asp.net core 集成 log4net 日志框架 Intro 在 asp.net core 中有些日志我们可能想输出到数据库或文件或elasticsearch等,如果不自己去实现一个 LoggerProvider 的话就需要借助第三方日志框架实现了,而一些第三方框架的实现大多比较完善和成熟,不失为一个好办法. 自己写了一个 log4net 的扩展 WeihanLi.Common.Logging.Log4Net,提供了在 .n

Spring MVC整合logback日志框架实战

1.引入依赖,本项目maven构建,普通项目导入想要的jar包即可 版本 <properties> <slf4j-api.version>1.7.7</slf4j-api.version> <logback.version>1.1.3</logback.version> </properties> 依赖包 <dependency> <groupId>ch.qos.logback</groupId>

第一节:框架前期准备篇之Log4Net日志详解

一. Log4Net简介 Log4net是从Java中的Log4j迁移过来的一个.Net版的开源日志框架,它的功能很强大,可以将日志分为不同的等级,以不同的格式输出到不同的存储介质中,比如:数据库.txt文件.内存缓冲区.邮件.控制台.ANSI终端.远程接收端等等,我们这里主要介绍最常用的两种:txt文件和数据库. (PS:其它的存储介质详见 http://logging.apache.org/log4net/release/config-examples.html) Log4net将日志分为五

ASP.NET MVC中Log4Net记录错误日志的使用

第一.在管理NuGet程序包 =>下载 Log4Net 第二.在web.config配置Log4Net 1:在<configuration>节点下 <configSections>节点中 配置log4Net节点引用. <!--log4net日志记录--> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net

Moon转告给你一个比Log4net更好日志框架--TracerX Logger 及其对应的日志查看器

一.介绍 TracerX logger是一个易于上手,且拥有众多高级特性的.NET日志框架. 它能够发送输出结果到多目的地(循环文件.事件日志等....).它也能生成文本和二进制文件.它拥有一个强大的查看器,该查看器支持过滤.着色.多线程.目录结构.跟踪级别.....同时它也能够折叠及扩展输出格式,可以显示绝对或者先对的时间戳.可以查看任意一行的输出调用栈.这些特性可以更加容易地帮助我们诊断程序问题. 该文主要介绍如何使用该框架,其中包含了许多代码示例.同时告诉大家,该框架用于了诸多商业软件中.

ASP.NET Core MVC之Serilog日志处理,你了解多少?

前言 本节我们来看看ASP.NET Core MVC中比较常用的功能,对于导入和导出目前仍在探索中,项目需要自定义列合并,所以事先探索了如何在ASP.NET Core MVC进行导入.导出,更高级的内容还需等我学习再给出. EntityFramework Core 在学习ASP.NET Core MVC之前我们来看看在EF Core中如何更新对象指定属性,这个问题之前我们已经探讨过,但是还是存在一点问题,请往下看. public void Update(T entity, params Expr

.NET开源分布式日志框架ExceptionLess实战演练(公开版)

一.课程介绍 在以前,我们做日志收集大多使用 Log4net,Nlog 等框架,在应用程序变得复杂并且集群的时候,可能传统的方式已经不是很好的适用了,因为收集各个日志并且分析他们将变得麻烦而且浪费时间.相信大家的项目中日志功能已经做为基础设施里必不可少的一部分了,日志记录不仅可以更好的记录用户行为,还可以记录系统运行日志,从而看到判断系统运行的健壮性.了解决实时日志监控问题,ELK提供的一套的解决方案就应运而生了 ,作为NET技术的我们,开源的轻量级分布式ExceptionLess 日志框架或许

Asp.Net MVC及Web API框架配置会碰到的几个问题及解决方案 (精髓)

前言 刚开始创建MVC与Web API的混合项目时,碰到好多问题,今天拿出来跟大家一起分享下.有朋友私信我问项目的分层及文件夹结构在我的第一篇博客中没说清楚,那么接下来我就准备从这些文件怎么分文件夹说起.问题大概有以下几点: 1.项目层的文件夹结构 2.解决MVC的Controller和Web API的Controller类名不能相同的问题 3.给MVC不同命名空间的Area的注册不同的路由 4.让Web API路由配置也支持命名空间参数 5.MVC及Web API添加身份验证及错误处理的过滤器