Log4net的使用

Log4net是一款非常好用、强大的开源日志记录组件,它来自于著名的Apache。起初是log4j专用于Java,后来又提供了log4net用于支持.NET。帮助.NET程序员也能够轻松的处理日志信息。

log4net是一个“库”,用于帮助程序员输出日志到大量不同的输出目标(文件、控制台、不同的数据库、甚至内存等等)。可以在这里下载到它的最新版本。log4net

好,下面进入正题,在C#当中如何利用好这个“著名”的日志组件呢?

我们可以按照下面的步骤来创建一个控制台项目来利用log4net进行日志的记录:

1、创建一个控制台项目,并添加log4net.dll引用

log4net.dll,这个文件可以从下载的包中找到。在创建好的控制台项目中,直接添加引用这个文件就可以了。

2、创建一个log4net.config文件,用于单独的进行log4net日志信息的配置

配置文件是核心,它记录了日志的详细的配置情况。log4net继承了Java的优点,能够以灵活的配置方式,将日志信息输出到不同的数据源。

下面展示了一个完整的log4net.config文件: 

[html]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <?xml version="1.0" encoding="utf-8" ?>  
  2. <configuration>  
  3.   <!--添加log4net自定义节点-->  
  4.   <configSections>  
  5.     <section name="log4net" type="System.Configuration.IgnoreSectionHandler"/>  
  6.   </configSections>  
  7.   <log4net>  
  8.   
  9.     <!--文件形式-->  
  10.     <appender name="FileAppender" type="log4net.Appender.FileAppender">  
  11.       <!--文件路径-->  
  12.       <file value="log-file.txt"/>  
  13.       <!--是否追加-->  
  14.       <appendToFile value="true"/>  
  15.       <!--显示格式-->  
  16.       <layout type="log4net.Layout.PatternLayout">  
  17.         <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"/>  
  18.       </layout>  
  19.     </appender>  
  20.   
  21.     <!--SqlServer形式-->  
  22.     <appender name="AdoNetAppender_SqlServer" type="log4net.Appender.AdoNetAppender">  
  23.       <bufferSize value="100" />  
  24.       <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />  
  25.       <connectionString value="data source=10.77.137.119;initial catalog=test;integrated security=false;persist security info=True;User ID=sa;Password=123456" />  
  26.       <commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />  
  27.       <parameter>  
  28.         <parameterName value="@log_date" />  
  29.         <dbType value="DateTime" />  
  30.         <layout type="log4net.Layout.RawTimeStampLayout" />  
  31.       </parameter>  
  32.       <parameter>  
  33.         <parameterName value="@thread" />  
  34.         <dbType value="String" />  
  35.         <size value="255" />  
  36.         <layout type="log4net.Layout.PatternLayout">  
  37.           <conversionPattern value="%thread" />  
  38.         </layout>  
  39.       </parameter>  
  40.       <parameter>  
  41.         <parameterName value="@log_level" />  
  42.         <dbType value="String" />  
  43.         <size value="50" />  
  44.         <layout type="log4net.Layout.PatternLayout">  
  45.           <conversionPattern value="%level" />  
  46.         </layout>  
  47.       </parameter>  
  48.       <parameter>  
  49.         <parameterName value="@logger" />  
  50.         <dbType value="String" />  
  51.         <size value="255" />  
  52.         <layout type="log4net.Layout.PatternLayout">  
  53.           <conversionPattern value="%logger" />  
  54.         </layout>  
  55.       </parameter>  
  56.       <parameter>  
  57.         <parameterName value="@message" />  
  58.         <dbType value="String" />  
  59.         <size value="4000" />  
  60.         <layout type="log4net.Layout.PatternLayout">  
  61.           <conversionPattern value="%message" />  
  62.         </layout>  
  63.       </parameter>  
  64.       <parameter>  
  65.         <parameterName value="@exception" />  
  66.         <dbType value="String" />  
  67.         <size value="2000" />  
  68.         <layout type="log4net.Layout.ExceptionLayout" />  
  69.       </parameter>  
  70.     </appender>  
  71.   
  72.     <!--Access数据库-->  
  73.     <appender name="AdoNetAppender_Access" type="log4net.Appender.AdoNetAppender">  
  74.       <connectionString value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Documents and Settings\Administrator\桌面\test.mdb;User Id=;Password=;" />  
  75.       <commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message]) VALUES (@log_date, @thread, @log_level, @logger, @message)" />  
  76.       <parameter>  
  77.         <parameterName value="@log_date" />  
  78.         <dbType value="String" />  
  79.         <size value="255" />  
  80.         <layout type="log4net.Layout.PatternLayout">  
  81.           <conversionPattern value="%date" />  
  82.         </layout>  
  83.       </parameter>  
  84.       <parameter>  
  85.         <parameterName value="@thread" />  
  86.         <dbType value="String" />  
  87.         <size value="255" />  
  88.         <layout type="log4net.Layout.PatternLayout">  
  89.           <conversionPattern value="%thread" />  
  90.         </layout>  
  91.       </parameter>  
  92.       <parameter>  
  93.         <parameterName value="@log_level" />  
  94.         <dbType value="String" />  
  95.         <size value="50" />  
  96.         <layout type="log4net.Layout.PatternLayout">  
  97.           <conversionPattern value="%level" />  
  98.         </layout>  
  99.       </parameter>  
  100.       <parameter>  
  101.         <parameterName value="@logger" />  
  102.         <dbType value="String" />  
  103.         <size value="255" />  
  104.         <layout type="log4net.Layout.PatternLayout">  
  105.           <conversionPattern value="%logger" />  
  106.         </layout>  
  107.       </parameter>  
  108.       <parameter>  
  109.         <parameterName value="@message" />  
  110.         <dbType value="String" />  
  111.         <size value="1024" />  
  112.         <layout type="log4net.Layout.PatternLayout">  
  113.           <conversionPattern value="%message" />  
  114.         </layout>  
  115.       </parameter>  
  116.     </appender>  
  117.   
  118.     <!--Oracle形式-->  
  119.     <appender name="AdoNetAppender_Oracle" type="log4net.Appender.AdoNetAppender">  
  120.       <!--数据库连接类型-->  
  121.       <connectionType value="System.Data.OracleClient.OracleConnection, System.Data.OracleClient, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />  
  122.       <!--数据库连接字符串-->  
  123.       <connectionString value="data source=orcl;User ID=damis;Password=damis" />  
  124.       <!--数据库执行语句-->  
  125.       <commandText value="INSERT INTO Log (Datetime,Thread,Log_Level,Logger,Message) VALUES (:log_date, :thread, :log_level, :logger, :message)" />  
  126.       <!--缓冲区大小-->  
  127.       <bufferSize value="128" />  
  128.       <!--数据库表字段参数-->  
  129.       <parameter>  
  130.         <parameterName value=":log_date" />  
  131.         <dbType value="DateTime" />  
  132.         <layout type="log4net.Layout.RawTimeStampLayout" />  
  133.       </parameter>  
  134.       <parameter>  
  135.         <parameterName value=":thread" />  
  136.         <dbType value="String" />  
  137.         <size value="255" />  
  138.         <layout type="log4net.Layout.PatternLayout">  
  139.           <conversionPattern value="%thread" />  
  140.         </layout>  
  141.       </parameter>  
  142.       <parameter>  
  143.         <parameterName value=":log_level" />  
  144.         <dbType value="String" />  
  145.         <size value="50" />  
  146.         <layout type="log4net.Layout.PatternLayout">  
  147.           <conversionPattern value="%level" />  
  148.         </layout>  
  149.       </parameter>  
  150.       <parameter>  
  151.         <parameterName value=":logger" />  
  152.         <dbType value="String" />  
  153.         <size value="255" />  
  154.         <layout type="log4net.Layout.PatternLayout">  
  155.           <conversionPattern value="%logger" />  
  156.         </layout>  
  157.       </parameter>  
  158.       <parameter>  
  159.         <parameterName value=":message" />  
  160.         <dbType value="String" />  
  161.         <size value="4000" />  
  162.         <layout type="log4net.Layout.PatternLayout">  
  163.           <conversionPattern value="%message" />  
  164.         </layout>  
  165.       </parameter>  
  166.     </appender>  
  167.   
  168.     <!--配置日志的目标存储形式-->  
  169.     <root>  
  170.       <!--文件形式-->  
  171.       <appender-ref ref="FileAppender"/>  
  172.   
  173.       <!--SqlServer形式-->  
  174.       <appender-ref ref="AdoNetAppender_SqlServer"/>  
  175.   
  176.       <!--Oracle形式-->  
  177.       <appender-ref ref="AdoNetAppender_Oracle"/>  
  178.   
  179.       <!--Access形式-->  
  180.       <appender-ref ref="AdoNetAppender_Access"/>  
  181.     </root>  
  182.   </log4net>  
  183. </configuration>  
上面我直接引用了官方的配置示例。可以在这里找到:log4net配置示例。这里面有各种目标数据源的配置示例,非常全面。

3、建立一个类Logger,用于进行日志的记录

在建好的Logger类中,添加如下代码:

[csharp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. //如果是winform或console等c/s程序,需要设置一下。  
  2. //具体步骤:右键log4net.config文件-属性-复制到输出目录:始终复制。目的是为了每次启动时能够找到这个config文件  
  3. [assembly: log4net.Config.XmlConfigurator(Watch = true, ConfigFile = "log4net.config")]  
  4. namespace Log4net  
  5. {  
  6.     /// <summary>  
  7.     /// 日志记录类  
  8.     /// </summary>  
  9.     public class Logger  
  10.     {  
  11.         #region 记录日志  
  12.         /// <summary>  
  13.         /// 记录日志  
  14.         /// </summary>  
  15.         /// <param name="legLevel">日志级别</param>  
  16.         /// <param name="msg">日志内容</param>  
  17.         public static void LoggerMsg(LogLevel legLevel, string msg)  
  18.         {  
  19.             log4net.ILog log = GetLogger();  
  20.             switch (legLevel)  
  21.             {  
  22.                 case LogLevel.Debug: log.Debug(msg); break;//Debug  
  23.                 case LogLevel.Error: log.Error(msg); break;//Error  
  24.                 case LogLevel.Fatal: log.Fatal(msg); break;//Fatal  
  25.                 case LogLevel.Info: log.Info(msg); break;//Info  
  26.                 case LogLevel.Warn: log.Warn(msg); break;//Warn  
  27.                 defaultbreak;  
  28.             }  
  29.         }  
  30.         #endregion  
  31.  
  32.         #region 获得一个日志记录对象  
  33.         /// <summary>  
  34.         /// 获得一个日志记录对象  
  35.         /// </summary>  
  36.         /// <returns>日志记录对象</returns>  
  37.         public static log4net.ILog GetLogger()  
  38.         {  
  39.             //MethodBase.GetCurrentMethod().DeclaringType 返回:命名空间名+类名  
  40.             return log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);  
  41.         }  
  42.         #endregion  
  43.     }  
  44.   
  45.     /// <summary>  
  46.     /// 日志记录级别  
  47.     /// </summary>  
  48.     public enum LogLevel  
  49.     {  
  50.         Debug,  
  51.         Info,  
  52.         Warn,  
  53.         Error,  
  54.         Fatal,  
  55.     }  
  56. }  
这里强调的是,一定要在命名空间上面加上:[assembly: log4net.Config.XmlConfigurator(Watch = true, ConfigFile = "log4net.config")]。并且如果你的是c/s项目,比如控制台、winform等程序,则必须要右键log4net.config文件-属性-复制到输出目录:改为始终复制。这样程序加载时才能找到这个log4net.config,才能进行日志的记录。

4、在控制台Main方法中进行测试

好了,最后一步,就是对上述的配置进行测试了。我们在Main方法中加上如下测试代码。

[csharp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. //主方法测试用  
  2. Logger.LoggerMsg(LogLevel.Info, "hello,log4net!");  
运行这个控制台,程序正常执行。

上面我演示了将日志记录输出到文件、Sql Server数据库、Oracle数据库、Access数据库等四种情况。如果有更多的其它数据源的输出,可以参考官方网站:http://logging.apache.org/log4net/release/config-examples.html 。


最后看下执行的结果:

txt:


access 2007:


sqlserver 2008:


oracle 10g:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值