.NET日志记录框架Log4Net使用总结

做项目,记录日志是免不了的。在开发过程中还可以调试,但是在项目发布之后,不可能长期这么做,日志则能够在最快的时间内发现问题。最近,在好几个项目中使用了Log4net,感觉确实给我省了不少力,总结一下使用吧,同时也留作以后备用。

1 使用Nuget安装Log4Net:

Install-Package log4net

 

2 创建LogHelper.cs

 
  1. using System;
  2. namespace UCsoft.Web.Common
  3. {
  4.     /// <summary>
  5.     /// Log4Net日志封装类  2014-08-28 14:58:50 By 唐有炜
  6.     /// </summary>
  7.     public class LogHelper
  8.     {
  9.         /// <summary>
  10.         /// 信息标志
  11.         /// </summary>
  12.         private static readonly log4net.ILog loginfo = log4net.LogManager.GetLogger("loginfo");
  13.         /// <summary>
  14.         /// 错误标志
  15.         /// </summary>
  16.         private static readonly log4net.ILog logerror = log4net.LogManager.GetLogger("logerror");
  17.         /// <summary>
  18.         /// 调试标志
  19.         /// </summary>
  20.         private static readonly log4net.ILog logdebug = log4net.LogManager.GetLogger("logdebug");
  21.         /// <summary>
  22.         /// Log4Net信息记录封装  2014-08-28 14:58:50 By 唐有炜
  23.         /// </summary>
  24.         /// <param name="message"></param>
  25.         /// <returns></returns>
  26.         public static void Info(string message)
  27.         {
  28.             if (loginfo.IsInfoEnabled)
  29.             {
  30.                 loginfo.Info(message);
  31.             }
  32.         }
  33.         /// <summary>
  34.         /// Log4Net错误记录封装  2014-08-28 14:58:50 By 唐有炜
  35.         /// </summary>
  36.         /// <param name="message"></param>
  37.         /// <returns></returns>
  38.         public static void Error(string message)
  39.         {
  40.             if (logerror.IsErrorEnabled)
  41.             {
  42.                 logerror.Error(message);
  43.             }
  44.         }
  45.         /// <summary>
  46.         /// Log4Net错误记录封装  2014-08-28 14:58:50 By 唐有炜
  47.         /// </summary>
  48.         /// <param name="message"></param>
  49.         /// <param name="ex"></param>
  50.         /// <returns></returns>
  51.         public static void Error(string message, Exception ex)
  52.         {
  53.             if (logerror.IsErrorEnabled)
  54.             {
  55.                 if (!string.IsNullOrEmpty(message) && ex == null)
  56.                 {
  57.                     logerror.ErrorFormat("<br/>【附加信息】 : {0}<br>", new object[] {message});
  58.                 }
  59.                 else if (!string.IsNullOrEmpty(message) && ex != null)
  60.                 {
  61.                     string errorMsg = BeautyErrorMsg(ex);
  62.                     logerror.ErrorFormat("<br/>【附加信息】 : {0}<br>{1}", new object[] { message, errorMsg });
  63.                 }
  64.                 else if (string.IsNullOrEmpty(message) && ex != null)
  65.                 {
  66.                     string errorMsg = BeautyErrorMsg(ex);
  67.                     logerror.Error(errorMsg);
  68.                 }
  69.             }
  70.         }
  71.         /// <summary>
  72.         /// Log4Net调试记录封装  2014-08-28 14:58:50 By 唐有炜
  73.         /// </summary>
  74.         /// <param name="message"></param>
  75.         /// <returns></returns>
  76.         public static void Debug(string message)
  77.         {
  78.             if (logdebug.IsErrorEnabled)
  79.             {
  80.                 logdebug.Debug(message);
  81.             }
  82.         }
  83.         /// <summary>
  84.         /// Log4Net调试记录封装  2014-08-28 14:58:50 By 唐有炜
  85.         /// </summary>
  86.         /// <param name="message"></param>
  87.         /// <param name="ex"></param>
  88.         /// <returns></returns>
  89.         public static void Debug(string message, Exception ex)
  90.         {
  91.             if (logdebug.IsDebugEnabled)
  92.             {
  93.                 if (!string.IsNullOrEmpty(message) && ex == null)
  94.                 {
  95.                     logdebug.DebugFormat("<br/>【附加信息】 : {0}<br>", new object[] {message});
  96.                 }
  97.                 else if (!string.IsNullOrEmpty(message) && ex != null)
  98.                 {
  99.                     string errorMsg = BeautyErrorMsg(ex);
  100.                     logdebug.DebugFormat("<br/>【附加信息】 : {0}<br>{1}", new object[] { message, errorMsg });
  101.                 }
  102.                 else if (string.IsNullOrEmpty(message) && ex != null)
  103.                 {
  104.                     string errorMsg = BeautyErrorMsg(ex);
  105.                     logdebug.Debug(errorMsg);
  106.                 }
  107.             }
  108.         }
  109.         /// <summary>
  110.         /// 美化错误信息
  111.         /// </summary>
  112.         /// <param name="ex">异常</param>
  113.         /// <returns>错误信息</returns>
  114.         private static string BeautyErrorMsg(Exception ex)
  115.         {
  116.             string errorMsg = string.Format("【异常类型】:{0} <br>【异常信息】:{1} <br>【堆栈调用】:{2}",
  117.                 new object[] {ex.GetType().Name, ex.Message, ex.StackTrace});
  118.             errorMsg = errorMsg.Replace("\r\n", "<br>");
  119.             errorMsg = errorMsg.Replace("位置", "<strong style=\"color:red\">位置</strong><br/>");
  120.             return errorMsg;
  121.         }
  122.     }
  123. }

3 在

 [assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", ConfigFileExtension = "config", Watch = true)]

3 创建log4net.config

 
  1. <log4net>
  2.   <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
  3.     <param name="File" value="Log\\" />
  4.     <!-- 输出到什么目录-->
  5.     <param name="AppendToFile" value="true" />
  6.     <!-- 是否覆写到文件中-->
  7.     <param name="StaticLogFileName" value="false" />
  8.     <!-- 是否使用静态文件名-->
  9.     <param name="DatePattern" value="yyyyMMdd&quot;.html&quot;" />
  10.     <!-- 日志文件名-->
  11.     <param name="RollingStyle" value="Date" />
  12.   <!--最小锁定模型以允许多个进程可以写入同一个文件-->
  13.             <param name="lockingModel"  type="log4net.Appender.FileAppender+MinimalLock" />
  14.     <layout type="log4net.Layout.PatternLayout">
  15.       <param name="ConversionPattern" value="&lt;HR COLOR=green&gt;%n日志时间:%d [%t] &lt;BR&gt;%n日志级别:%-5p &lt;BR&gt;%n日志标志:%c &lt;BR&gt; %n日志信息:%m &lt;BR&gt;%n &lt;HR Size=1&gt;"  />
  16.     </layout>
  17.     <filter type="log4net.Filter.LevelRangeFilter">
  18.       <levelMin value="DEBUG" />
  19.       <levelMax value="INFO" />
  20.     </filter>
  21.   </appender>
  22.   <appender name="ErrorFileAppender" type="log4net.Appender.RollingFileAppender">
  23.     <param name="File" value="Log\\" />
  24.     <param name="AppendToFile" value="true" />
  25.     <param name="StaticLogFileName" value="false" />
  26.     <param name="DatePattern" value="yyyyMMdd.error&quot;.html&quot;" />
  27.     <param name="RollingStyle" value="Date" />
  28.   <!--最小锁定模型以允许多个进程可以写入同一个文件-->
  29.             <param name="lockingModel"  type="log4net.Appender.FileAppender+MinimalLock" />
  30.     <layout type="log4net.Layout.PatternLayout">
  31.       <param name="ConversionPattern" value="&lt;HR COLOR=red&gt;%n异常时间:%d [%t] &lt;BR&gt;%n异常级别:%-5p &lt;BR&gt;%n日志标志:%c &lt;BR&gt; %n异常信息:%m &lt;BR&gt;%n &lt;HR Size=1&gt;"  />
  32.     </layout>
  33.     <filter type="log4net.Filter.LevelRangeFilter">
  34.       <levelMin value="ERROR" />
  35.       <levelMax value="FATAL" />
  36.     </filter>
  37.   </appender>
  38.   <root>
  39.     <level value="ALL" />
  40.     <appender-ref ref="LogFileAppender" />
  41.   <appender-ref ref="ErrorFileAppender"/>
  42.   </root>
  43. </log4net>

 然后必须设置为复制到输出目录

4 测试

   LogHelper.Debug("测试");

然后在Web根目录会生成一个Log文件夹,里面会有两个文件,一个一日期命名,一个错误文件

你可能感兴趣的:(.net)