当前位置 > 首页 > Asp.net

Log4net 之 RollingFileAppender

2012-12-1 8:50:00来源:Asp.net

一旦我们的应用程序移植到生产环境中,就不能在对它进行调试了,这时候程序生成日志就尤为重要。.Net中包含了System.Diagnostics.Trace类,你可以为Trace添加listener,将Trace的内容输出至一个日志文件,但这样的做法会导致长时间以后日志文件过大。log4net是一个开源的日志组件,它包含了很多不同的appender,这些appender的作用是将日志的内容输出至不同的地方,比如AdoNetAppender(输出至数据库),ConsoleAppender(输出至控制台),EventLogAppender(输出至Windows Event Log),FileAppender(输出至一个日志文件)。本文中着重要介绍RollingFileAppender。顾名思义,它可以“滚动”地生成日志文件,也就是可以将日志输出至多个文件。“滚动”可以基于两种方式:(1)文件大小, 比如我们设定日志文件不能超过1M,那么每当一个日志文件的大小要超过1M时,RollingFileAppender就会产生一个新的日志文件;(2)日期,这种方式为每一天都产生一个日志文件。本文中后面我会基于这两种滚动方式,分别举出一个实例演示。

 

在我写本文的时候,log4net已经出到版本 1.2.11了(已经很就没有发布新版本了)。可以在http://logging.apache.org/log4net/ 下载源代码,也可以直接下载Binaries。在下载好Binaries后,在\log4net-1.2.11-bin-newkey\log4net-1.2.11\bin\net 文件夹中可以看到为不同.Net版本编译好的log4net.dll,其中包括 2.0, 3.0,3.5,和 4.0。选择你要使用的.Net版本,将log4net.dll 添加到你的项目引用中。下面来看一个Asp.Net的应用程序如何使用log4net以及log4net的配置文件。

 

首先在AssemblyInfo.cs中添加这样一行

[assembly: log4net.Config.XmlConfigurator(Watch = true)]

然后代码如下

public class Logger
{
private static ILog logger = LogManager.GetLogger("mycompany.logger");

public static void LogDebug(string MethodName, string Message)
{
logger.Debug(MethodName
+ "::" + Message);
}

public static void LogInfo(string MethodName, string Message)
{
logger.Info(MethodName
+ "::" + Message);
}

public static void LogWarning(string MethodName, string Message)
{
logger.Warn(MethodName
+ "::" + Message);
}

public static void LogError(string MethodName, string Message)
{
logger.Error(MethodName
+ "::" + Message);
}

public static void LogFatal(string MethodName, string Message)
{
logger.Fatal(MethodName
+ "::" + Message);
}
}
protected void Button1_Click(object sender, EventArgs e)
{
MethodBase methodBase
= new StackFrame().GetMethod();
string methodString = this.GetType().Name + "::" + methodBase.Name;
try
{
Logger.LogDebug(methodString,
"button is clicked");
}
catch (Exception ex)
{
Logger.LogError(methodString, ex.ToString());
}
}

上面的例子中使用了Logger类来封装log4net,在Button1的click事件处理器中,使用了Logger.LogDebug方法。该Asp.Net web application的配置文件web.config内容如下

<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<

  • Impossible 与 I’m possible

    2007-7-10 10:02:00

    摘要: 这是一个发生在美国通用汽车的客户与该公司客服部间的真实故事,希望引用这个故事和DUDU一起在商业化的道路上共勉,也希望我们技术人员能够从中得到一些启迪…… 阅读全文 南疯 200

  • 《MOSS工作流权限设置》之一 “我的任务不给你看”

    2007-8-21 2:17:00

    摘要: 一直以来都被MOSS的工作流权限问题所困扰. 我们虽然将任务分配给了某人,但事实上,所有在任务列表中有编辑权限的用户都可以编辑该任务. 而我们并不希望用户能够看到不属于自己的任务.

  • .net重写url浅谈

    2009-10-12 17:58:00

    摘要: 最近小项目要求重写url找了下资料用到了MS的2个dll,微软的例子写得太不明显了。后来终于改好了。ActionlessForm.dll------用来处理回发URLRewriter.dll

  • Serialize and Deserialize JSON

    2009-11-7 2:47:00

    On one of the projects I am working on I needed a way to work get the JSON string generated from

  • getElementsByAttribute

    2009-10-27 11:56:00

    阅读: 225 评论: 5 作者: 司徒正美 发表于 2009-10-27 09:51 原文链接 这个可以说属性选择符的JS版,用来遴选元素是适合不过。在开始之前,我们复习一下CSS2的属

  • Finalizer线程对Object生命周期的影响

    2009-4-14 5:22:00

    摘要: 这期博客的话题有些沉重,我们来讨论.net对象的生生死死。首先,要给生死下个定义。在这篇博客中,每当谈及一个对象是死了的对象,指的是用户无法再获得其引用。这个定义是个对用户友好的定义,因为有

  • “Dogfooding” VS 2010和 .NET 4

    2010-4-20 7:38:00

    [原文地址]: "Dogfooding" VS 2010 and .NET 4 [原文发表时间]:Thursday, April 08, 2010 11:00 PM

  • Nhibernate学习之起步篇-1

    2007-3-22 0:03:00

    摘要: 阅读全文 jillzhang 2007-03-21 22:51 发表评论

  • 我就是那个福娃

    2007-5-10 11:13:00

    很小以来,对于大型充气玩具一直充满好奇,也曾经在麦当劳门口看到麦当劳叔叔的充气娃娃,甚至过去和他握手,询问他在里面感觉如何。而在刚过去的五一节当中,我也体验了一把做充气娃娃的感觉。(本来想让大家猜猜

  • Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 6 ----asp.net MVC+Extjs

    2009-2-3 0:41:00

    摘要: 利用Extjs作为客户端完成前台界面视图层,通过ajax请求Asp.net mvc的Controller的方式实现与服务器交互.通过实现IModelBinder接口,扩展出JsonModel