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


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

    1 使用Nuget安装Log4Net:

    Install-Package log4net

    QQ截图20141031182038

    QQ截图20141031182104

    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(" ", "<br>");
    119.             errorMsg = errorMsg.Replace("位置", "<strong style="color:red">位置</strong><br/>");
    120.             return errorMsg;
    121.         }
    122.     }
    123. }

    3 在

    QQ截图20141031182845

    QQ截图20141031182858

     [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>

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

    QQ截图20141031185734

    4 测试

       LogHelper.Debug("测试");

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

    QQ截图20141031190317

  • 相关阅读:
    张旭结对编程作业
    团队第一次作业(软工C#造梦厂)
    张旭第二次作业
    跨域问题
    .Net Core3.1使用AspectCore
    .Net中HttpClient之SendAsync方法
    两个具有相同属性的类赋值
    工具类--HttpUtils
    工具类--CacheHelper
    工具类--JsonHelper
  • 原文地址:https://www.cnblogs.com/jliuwork/p/4066438.html
Copyright © 2020-2023  润新知