一、简介
几乎所有的大型应用都会有自己的用于跟踪调试的API。因为一旦程序被部署以后,就不太可能再利用专门的调试工具了。然而一个管理员可能需要有一套强大的日志系统来诊断和修复配置上的问题。经验表明,日志记录往往是软件开发周期中的重要组成部分。它具有以下几个优点:它可以提供应用程序运行时的精确环境,可供开发人员尽快找到应用程序中的Bug;一旦在程序中加入了Log 输出代码,程序运行过程中就能生成并输出日志信息而无需人工干预。另外,日志信息可以输出到不同的地方(控制台,文件等)以备以后研究之用。Log4net就是为这样一个目的设计的,用于.NET开发环境的日志记录包。
log4net 有四种主要的组件,分别是Logger(日志器), Repository(库), Appender(输出方式)以及 Layout(布局方式).
二、具体使用方法
1、引用log4net组件
2、实现的方式
实现的方式一:2.1不经过配置文件,直接简单地在控制台实现日志
namespace log4net { class Program { static void Main(string[] args) { //第一步:初始化,这里使用 BasicConfigurator 是默认初始化输出到控制台 log4net.Config.BasicConfigurator.Configure(); //第二步:取得一个记录日志logger log4net.ILog logger = log4net.LogManager.GetLogger("Test"); //第三步:需要Appender设置输出的地方,因为上面用了BasicConfigurator,默认了输出位置,所以不用设置了 //第四步:设置输出的格式,这里也会有提供一个默认的布局了(输出方式) //日志输出级别对于BasicConfigurator来说是Debug级别,可以看到所有其他级别的输出 logger.Info("hello world"); Console.ReadKey(); } } }
实现方式二:2.2通过配置文件,在控制台的日志记录处理
<?xml version="1.0" encoding="utf-8" ?> <configuration> <!--配置log4net开始--> <!--注册让在.net 中支持log4net开始--> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/> </configSections> <!--注册让在.net 中支持log4net结束--> <!--该节点和上面section的name对应--> <log4net> <!--可以统一设置所有日志器的Append和level(开始)--> <!--这样子做就不用每个日志器都设置一遍了,每个日志器可以从root继承配置信息--> <!--<root> <level value="DEBUG" /> --> <!--<appender-ref ref="LogFileAppender" />配置输出到文件--> <!-- <appender-ref ref="ConsoleAppender" /> </root>--> <!--可以统一设置所有日志器的Append和level(结束)--> <!--配置日志器开始--> <!--日志器名字name:命名空间.类名(随意自己起名字,这是为了方便找到)--> <logger name="testApp.Logging"> <!--设置哪个Appender--> <appender-ref ref="ConsoleAppender"></appender-ref> <!--设置DEBUG等级--> <level value="DEBUG"/> </logger> <!--配置日志器结束--> <!--Appender配置输出控制台开始--> <!--可以配置Appender输出到哪些地方,具体看文档--> <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" > <!--使用的布局--> <layout type="log4net.Layout.PatternLayout"> <!--输出格式的参数,每个都有意义--> <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/> </layout> </appender> <!--Appender配置输出控制台结束--> <!--Appender配置输出到文件开始--> <appender name="LogFileAppender" type="log4net.Appender.FileAppender" > <!--输出文件,还有起名字--> <param name="File" value="log-file.txt" /> <!--追加模式为true--> <param name="AppendToFile" value="true" /> <!--输出布局开始--> <layout type="log4net.Layout.PatternLayout"> <!--内容头部--> <param name="Header" value="[Header]\r\n"/> <!--内容尾部--> <param name="Footer" value="[Footer]\r\n"/> <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" /> </layout> <!--输出布局结束--> </appender> <!--Appender配置输出到文件结束--> </log4net> <!--配置log4net结束--> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> </startup> </configuration>
namespace log4net { class Program { static void Main(string[] args) { //实际应用中,一般通过配置文件设置 log4net.Config.XmlConfigurator.Configure();//通过xml注册 //testApp.Logging 名字对应xml的logger 名字 log4net.ILog logger = log4net.LogManager.GetLogger("testApp.Logging"); logger.Info("实际生产!!!"); Console.ReadKey(); } } }
2.3Web使用log4net
首先在Global.asax文件的Application_Start方法注册log4net
protected void Application_Start(object sender, EventArgs e)
{
log4net.Config.XmlConfigurator.Configure();//通过xml注册
}
然后页面出错的时候会调用Page_Error方法,在该方法中做记录处理
//页面异常记录的处理,页面出现异常后会触发该事件
protected void Page_Error(object sender, EventArgs e)
{
HttpServerUtility server = this.Server;
Exception ex = server.GetLastError();
log4net.ILog logger = log4net.LogManager.GetLogger("testApp.Logging");
logger.Fatal(ex.Message);
}