首页 > 代码库 > log4net

log4net

一、log4net介绍

     log4net是一个第三方日志框架,有三个主要组件:loggers,appenders和layouts。这3个组件一起工作使得开发者能够根据信息类型和等级(Lever)记录信息,以及在运行时控制信息的格式化和信息的写入位置(如控制台,文件,内存,数据库等)。

     Appender:可以将日志输出到不同地方,不同的输出目标对应不同的Appender,如RollingFileAppender(滚动文件),AdoNetAppender(数据库),SmtpAppender(邮件),ConsoleAppender(控制台)等。

     level(级别):标识这条日志的重要级别。None>Fatal>ERROR>WARN>DEBUG>INFO>ALL,设定一个Level,那么低于这个Leveld 日志是不会被写入到Appender中的。

     log4net还可以设定多个Appender,可以实现同时将日志记录到文件、数据库、发邮件等。可以设定不同Appender的不同level,例如:实现普通级别记录到文件,Error以上级别都记录到数据库。还可以自定义Appender,自己实现将Error发短信等。

二、创建log4net Demo

     1.创建控制台应用程序Log4netDemo

     2.右键Log4netDemo项目,选择“管理NuGet程序包”,搜索“log4net”,添加log4net程序包

技术分享

   3.添加配置文件log4net.config,配置文件内容如下:

<?xml version="1.0" encoding="utf-8"?><configuration>  <configSections>    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>  </configSections>  <log4net>         <root>      <!-- Set root logger level to ERROR and its appenders -->      <!-- OFF, FATAL, ERROR, WARN, INFO, DEBUG, ALL -->      <level value=http://www.mamicode.com/"DEBUG"/>      <appender-ref ref="RollingAppender"/>      <appender-ref ref="ConsoleAppender"/>    </root>    <!--指定日志记录的方式:以滚动文件的方式-->    <appender name="RollingAppender" type="log4net.Appender.RollingFileAppender,log4net" >      <!--指定日志存放的路径-->      <file value=http://www.mamicode.com/"D:\logs\" />      <!--日志以追加的形式记录-->      <appendToFile value=http://www.mamicode.com/"true" />      <rollingStyle value=http://www.mamicode.com/"Date" />      <!--设置日志文件名称的生成规则-->      <datePattern value=http://www.mamicode.com/"&quot;Logs_&quot;yyyyMMdd&quot;.txt&quot;" />      <!--多线程时采用最小锁定-->      <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>      <!--日志名称是否静态:否-->      <staticLogFileName value=http://www.mamicode.com/"false" />      <!--日志内容格式和布局设置-->      <layout type="log4net.Layout.PatternLayout,log4net">        <conversionPattern value=http://www.mamicode.com/"%d [%t] %-5p %c - %m%n" />        <header value=http://www.mamicode.com/"----------------------header-------------------------" />        <footer value=http://www.mamicode.com/"----------------------footer--------------------------" />      </layout>    </appender>    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender,log4net">      <layout type="log4net.Layout.PatternLayout,log4net">        <conversionPattern value=http://www.mamicode.com/"%d [%t] %-5p %c - %m%n" />      </layout>    </appender>  </log4net></configuration> 

    配置文件中设置了两个Appender:RollingFileAppender和ConsoleAppender,将日志文件同时输出到文件和控制台

   4.添加封装类Logger,代码如下:

 public class Logger    {        static Logger()        {            XmlConfigurator.Configure(new FileInfo(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "log4net.config")));            ILog Log = LogManager.GetLogger(typeof(Logger));        }        private ILog loger = null;        public Logger(Type type)        {            loger = LogManager.GetLogger(type);        }        /// <summary>        /// Log4日志        /// </summary>        /// <param name="msg"></param>        /// <param name="ex"></param>        public void Error(string msg = "出现异常", Exception ex = null)        {            loger.Error(msg, ex);        }        /// <summary>        /// Log4日志        /// </summary>        /// <param name="msg"></param>        public void Warn(string msg)        {            loger.Warn(msg);        }        /// <summary>        /// Log4日志        /// </summary>        /// <param name="msg"></param>        public void Info(string msg)        {            loger.Info(msg);        }        /// <summary>        /// Log4日志        /// </summary>        /// <param name="msg"></param>        public void Debug(string msg)        {            loger.Debug(msg);        }    }

    5.测试如下:

 class Program    {        private static Logger logger = new Logger(typeof(Program));        static void Main(string[] args)        {            try            {                int x = 1, y = 0;                int result = x / y;            }            catch (Exception ex)            {                logger.Error("程序发生异常", ex);            }            Console.ReadKey();        }    }

 

log4net