一、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)
暂无评论。