欢迎光临

木子屋

标题: log4net入门简介

作者: dnawo

日期: 2011-07-30 07:07 AM

分类: Win编程

内容: log4net是一个第三方的.NET开源日志记录组件，使用log4net可以方便地将日志信息记录到文件、控制台、Windows事件日志和数据库等介质中。
一、log4net四剑客
log4net记录日志的整个过程可由Logger、Appender、Layout、Filters四个对象完成，其中Logger负责日志发起，Appender负责指定日志存储介质，Layout负责对日志内容进行格式化，Filters负责对日志进行筛选，只有满足筛选条件的日志才会被记录。
1.Logger对象
Logger对象负责日志发起，这可通过调用对象Debug、Info、Warn、Error、Fatal 五个方法中任意一个方法来完成：
复制内容到剪贴板 程序代码void Debug(object message);
void Info(object message);
void Warn(object message);
void Error(object message);
void Fatal(object message);
有的朋友就会奇怪了：写一个方法来发起不就可以了，为什么要五个？这正是log4net的一个优点，在一个应用程序生命周期的不同阶段中，我们想看的日志内容会有不同，开发阶段的调试信息，运行阶段的出错信息，如果不加以区分都记录在一个介质中，每次都要查找半天，肯定痛苦死，所以每个Logger对象都有设置一个优先级，共7种，从低到高依次为：ALL、Debug、Info、Warn、Error、Fatal、OFF，可以看到，除了最低(ALL)和最高(OFF)，其他五个刚好和上边五个方法对应，其实每个方法自身就对应着一个优先级，每次调用方法时程序都会判断自身是否不小于对象优先级，是则记录日志，否则放弃。
2.Appender对象
Appender负责指定日志存储介质，比如文本文件、数据库、系统日志等等，所有Appender对象都继承自log4net.Appender.AppenderSkeleton，log4net自带的存储介质有以下几种：
引用内容log4net.Appender.AdoNetAppender
log4net.Appender.AnsiColorTerminalAppender
log4net.Appender.AspNetTraceAppender
log4net.Appender.BufferingForwardingAppender
log4net.Appender.ColoredConsoleAppender
log4net.Appender.ConsoleAppender
log4net.Appender.EventLogAppender
log4net.Appender.FileAppender
log4net.Appender.ForwardingAppender
log4net.LocalSyslogAppender
log4net.Appender.MemoryAppender
log4net.Appender.NetSendAppender
log4net.Appender.OutputDebugStringAppender
log4net.Appender.RemoteSyslogAppender
log4net.Appender.RemotingAppender
log4net.Appender.RollingFileAppender
log4net.Appender.SmtpAppender
log4net.Appender.SmtpPickupDirAppender
log4net.Appender.TelnetAppender
log4net.Appender.TraceAppender
log4net.Appender.UdpAppender
每选择一种存储介质都需要设置与其对应的参数，比如使用文本文件存储日志，你需要说一下文件的磁盘位置，使用数据库，你要说明下数据库类型、连接方式等等。当然了，如果上边的介质不够用，通过继承log4net.Appender.AppenderSkeleton写自己的存储介质也是可以的。
3.Layout对象
Layout负责对日志内容进行格式化，所有Layout对象继承自log4net.Layout.LayoutSkeleton，log4net同样自带了几种格式化方式：
引用内容log4net.Layout.ExceptionLayout
log4net.Layout.PatternLayout
log4net.Layout.RawTimeStampLayout
log4net.Layout.RawUtcTimeStampLayout
log4net.Layout.SimpleLayout
log4net.Layout.XmlLayout
log4net.Layout.XmlLayoutSchemaLog4j
和Appender对象一样，每种格式化方式都有对应的参数，你一样可以通过继承log4net.Layout.LayoutSkeleton定义自己的格式化方式。
4.Filters对象
Filters负责对日志进行筛选，它们继承自log4net.Filter.FilterSkeleton，log4net自带的Filters对象有：
引用内容log4net.Filter.DenyAllFilter
log4net.Filter.LevelMatchFilter
log4net.Filter.LevelRangeFilter
log4net.Filter.LoggerMatchFilter
log4net.Filter.PropertyFilter
log4net.Filter.StringMatchFilter
二、log4net使用说明
从上一节我们知道log4net记录日志会使用到四个对象，那具体怎么使用呢？很简单，先在config文件中声明好，然后在程序中直接获取Logger对象记录即可。
1.config文件结构
引用内容<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
<log4net>
<root>
<level value="" />
<appender-ref ref="" />
</root>
<logger name="">
<level value=""/>
<appender-ref ref="" />
</logger>
<appender name="" type="">
<param name="" value="" />
<layout type="">
<param name="" value=""/>
</layout>
<filter type="">
<param name="" value=""/>
</filter>
</appender>
</log4net>
</configuration>
所有logger节点都可继承root节点的内容；同一个config文件中允许有多个logger节点和appender节点；一个logger节点允许引用多个appender节点。
2.assembly配置
①.WEB站点
在Global.asax文件中加入以下内容：
复制内容到剪贴板 程序代码void Application_Start(object sender, EventArgs e)
{
log4net.Config.XmlConfigurator.Configure();
}
②.控制台应用程序、Windows窗体应用程序
在AssemblyInfo.cs文件中或是命名空间前面加入以下内容：
复制内容到剪贴板 程序代码[assembly: log4net.Config.XmlConfigurator(Watch = true)]
3.创建Logger对象实例
复制内容到剪贴板 程序代码//using log4net;
ILog logger1 = LogManager.GetLogger("LoggerName")
三、log4net使用实例(控制台应用程序)
1.app.config
复制内容到剪贴板 程序代码<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
<log4net>
<!-- Logger -->
<root>
<level value="ALL" />
<appender-ref ref="LogFileAppender" />
</root>
<logger name="Logger1">
<level value="DEBUG"/>
</logger>
<logger name="Logger2">
<level value="WARN"/>
<appender-ref ref="ConsoleAppender" />
<appender-ref ref="EventLogAppender" />
</logger>
<!-- Appender -->
<appender name="LogFileAppender" type="log4net.Appender.FileAppender">
<param name="File" value="Log\1.log" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss}: %m,line:%L%n"/>
</layout>
</appender>
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss}: %m,line:%L%n"/>
</layout>
</appender>
<appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss}: %m,line:%L%n"/>
</layout>
</appender>
</log4net>
</configuration>
2.Program.cs
复制内容到剪贴板 程序代码using System;
using log4net;
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
namespace ConsoleApplication1
{
class Program
{
private static readonly ILog logger1 = LogManager.GetLogger("Logger1");
private static readonly ILog logger2 = LogManager.GetLogger("Logger2");
static void Main(string[] args)
{
logger1.Debug("err1");
logger1.Warn("err2");
logger2.Debug("err3");
logger2.Warn("err4");
logger2.Fatal("err5");
Console.ReadKey();
}
}
}
四、参考资料
@.log4net官方文档：http://logging.apache.org/log4net/release/manual/introduction.html
@.Log4Net使用指南：http://www.cnblogs.com/dragon/archive/2005/03/24/124254.html
@.Log4Net五步走：http://hi.baidu.com/zzticzh/blog/item/6653a0648280aef5f63654f7.html
@.log4net使用详解：http://blog.csdn.net/zhoufoxcn/article/details/2220533
@.log4net用后总结：http://blog.163.com/sunxitao88/blog/static/683144392008428114510606/

+ 查看当前日志评论 (0)

登录

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 0.977 ms

返回

标题: log4net入门简介

你没有权限发表评论

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 0.977 ms

返回

暂无评论

返回

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 1.023 ms

返回