不错呦!smile@林凯西,确保“准备文件”中的几个文件都有安装,S...您好,看了您这篇帖子觉得很有帮助。但是有个问题想请...我的修改过了怎么还被恶意注册呢 @jjjjiiii 用PJ快9年了,主要是A...PJ3啊,貌似很少有人用PJ了,现在不是WP就是z...@332347365,我当时接入时错误码没有-10...楼主,ChkValue值应为-103是什么意思呢?...大哥 你最近能看到我发的信息,请跟我联系,我有个制...
log4net入门简介
编辑:dnawo 日期:2011-07-30
log4net是一个第三方的.NET开源日志记录组件,使用log4net可以方便地将日志信息记录到文件、控制台、Windows事件日志和数据库等介质中。
一、log4net四剑客
log4net记录日志的整个过程可由Logger、Appender、Layout、Filters四个对象完成,其中Logger负责日志发起,Appender负责指定日志存储介质,Layout负责对日志内容进行格式化,Filters负责对日志进行筛选,只有满足筛选条件的日志才会被记录。
1.Logger对象
Logger对象负责日志发起,这可通过调用对象Debug、Info、Warn、Error、Fatal 五个方法中任意一个方法来完成:
有的朋友就会奇怪了:写一个方法来发起不就可以了,为什么要五个?这正是log4net的一个优点,在一个应用程序生命周期的不同阶段中,我们想看的日志内容会有不同,开发阶段的调试信息,运行阶段的出错信息,如果不加以区分都记录在一个介质中,每次都要查找半天,肯定痛苦死,所以每个Logger对象都有设置一个优先级,共7种,从低到高依次为:ALL、Debug、Info、Warn、Error、Fatal、OFF,可以看到,除了最低(ALL)和最高(OFF),其他五个刚好和上边五个方法对应,其实每个方法自身就对应着一个优先级,每次调用方法时程序都会判断自身是否不小于对象优先级,是则记录日志,否则放弃。
2.Appender对象
Appender负责指定日志存储介质,比如文本文件、数据库、系统日志等等,所有Appender对象都继承自log4net.Appender.AppenderSkeleton,log4net自带的存储介质有以下几种:
引用内容
每选择一种存储介质都需要设置与其对应的参数,比如使用文本文件存储日志,你需要说一下文件的磁盘位置,使用数据库,你要说明下数据库类型、连接方式等等。当然了,如果上边的介质不够用,通过继承log4net.Appender.AppenderSkeleton写自己的存储介质也是可以的。
3.Layout对象
Layout负责对日志内容进行格式化,所有Layout对象继承自log4net.Layout.LayoutSkeleton,log4net同样自带了几种格式化方式:
引用内容
和Appender对象一样,每种格式化方式都有对应的参数,你一样可以通过继承log4net.Layout.LayoutSkeleton定义自己的格式化方式。
4.Filters对象
Filters负责对日志进行筛选,它们继承自log4net.Filter.FilterSkeleton,log4net自带的Filters对象有:
引用内容
二、log4net使用说明
从上一节我们知道log4net记录日志会使用到四个对象,那具体怎么使用呢?很简单,先在config文件中声明好,然后在程序中直接获取Logger对象记录即可。
1.config文件结构
引用内容
所有logger节点都可继承root节点的内容;同一个config文件中允许有多个logger节点和appender节点;一个logger节点允许引用多个appender节点。
2.assembly配置
①.WEB站点
在Global.asax文件中加入以下内容:
②.控制台应用程序、Windows窗体应用程序
在AssemblyInfo.cs文件中或是命名空间前面加入以下内容:
3.创建Logger对象实例
三、log4net使用实例(控制台应用程序)
1.app.config
2.Program.cs

四、参考资料
@.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/
一、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);
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.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
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.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>
<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();
}
{
log4net.Config.XmlConfigurator.Configure();
}
②.控制台应用程序、Windows窗体应用程序
在AssemblyInfo.cs文件中或是命名空间前面加入以下内容:
复制内容到剪贴板
程序代码

[assembly: log4net.Config.XmlConfigurator(Watch = true)]
3.创建Logger对象实例
复制内容到剪贴板
程序代码

//using log4net;
ILog logger1 = LogManager.GetLogger("LoggerName")
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>
<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();
}
}
}
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 | 引用: 0 | 查看次数: 5134
发表评论
请登录后再发表评论!