• Log4net入门(帮助类篇)


      在前几篇Log4net入门文件的讲述过程中,我们在使用log4net的类中都要编写如下一行代码:

     1 private static log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 

      如果有多个类都要使用log4net输出日志信息,那么每个类中都要编写这一行代码,为了避免这种情况的发生,我们将编写一个静态类来对log4net进行封装。那么,以后我们在什么地方需要输出日志信息,只需要调用这个静态类的相应方法即可。实现步骤如下所示:

    1、创建一个空白解决方案,命名为“Utils”。

    2、在该解决方案中创建一个名为“Log4netUtil”的类库项目,然后对该类库项目使用“NuGet包管理器”安装log4net程序集。

    3、展开“Log4netUtil”类库项目的“Properties”属性,双击打开“AssemblyInfo.cs”文件,在该文件的最下面添加如下一行代码:

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

      注意:上面一行代码中的“Log4net.config”要与我们之后添加的配置文件的名字一致。

    4、在“Log4netUtil”类库项目中添加一个名为“Log4netHelper”的静态类,代码如下所示:

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 
     7 namespace Log4netUtil
     8 {
     9     public static class Log4netHelper
    10     {
    11         private static log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
    12 
    13         public static void Debug(object message)
    14         {
    15             log.Debug(message);
    16         }
    17 
    18         public static void Debug(object message, Exception exception)
    19         {
    20             log.Debug(message, exception);
    21         }
    22 
    23         public  static void Info(object message)
    24         {
    25             log.Info(message);
    26         }
    27 
    28         public static void Info(object message, Exception exception)
    29         {
    30             log.Info(message, exception);
    31         }
    32 
    33         public static void Warn(object message)
    34         {
    35             log.Warn(message);
    36         }
    37 
    38         public static void Warn(object message, Exception exception)
    39         {
    40             log.Warn(message, exception);
    41         }
    42 
    43         public static void Error(object message)
    44         {
    45             log.Error(message);
    46         }
    47 
    48         public static void Error(object message, Exception exception)
    49         {
    50             log.Error(message, exception);
    51         }
    52 
    53         public static void Fatal(object message)
    54         {
    55             log.Fatal(message);
    56         }
    57 
    58         public static void Fatal(object message, Exception exception)
    59         {
    60             log.Fatal(message, exception);
    61         }
    62     }
    63 }

    5、右击“Utils”解决方案,新建一个名为“Log4netTest”控制台应用程序,该应用程序主要用来测试log4net的帮助类是否正确运行。

    6、右击新创建的“Log4netTest”控制台应用程序的“引用”节点,添加对“Log4netUtil”类库的引用。

    7、在“Log4netTest”的根目录下添加一个名为“Log4net.config”的配置文件,并将该配置文件的“复制到输出目录”属性的值设置为“始终复制”,然后修改该配置文件的内容如下所示:

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <configuration>
     3   <configSections>
     4     <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
     5   </configSections>
     6 
     7   <log4net>
     8     <!-- 将日志以回滚文件的形式写到文件中 -->
     9     <!-- 按日期切分日志文件,并将日期作为日志文件的名字 -->
    10     <appender name="RollingFileAppenderNameByDate" type="log4net.Appender.RollingFileAppender">
    11       <!-- 日志文件存放位置,可以为绝对路径也可以为相对路径 -->
    12       <file value="C:Logs" />
    13       <!-- 将日志信息追加到已有的日志文件中-->
    14       <appendToFile value="true" />
    15       <!-- 最小锁定模式,以允许多个进程可以写入同一个文件 -->
    16       <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
    17       <!-- 指定按日期切分日志文件 -->
    18       <rollingStyle value="Date" />
    19       <!-- 日志文件的命名规则 -->
    20       <datePattern value="&quot;UtilLogs_&quot;yyyyMMdd&quot;.log&quot;" />
    21       <!-- 当将日期作为日志文件的名字时,必须将staticLogFileName的值设置为false -->
    22       <staticLogFileName value="false" />
    23 
    24       <layout type="log4net.Layout.PatternLayout">
    25         <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
    26       </layout>
    27     </appender>
    28 
    29     <root>
    30       <!-- 控制级别,由低到高:ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF -->
    31       <!-- 比如定义级别为INFO,则INFO级别向下的级别,比如DEBUG日志将不会被记录 -->
    32       <!-- 如果没有定义LEVEL的值,则缺省为DEBUG -->
    33       <level value="ALL" />
    34       <!-- 按日期切分日志文件,并将日期作为日志文件的名字 -->
    35       <appender-ref ref="RollingFileAppenderNameByDate" />
    36     </root>
    37   </log4net>
    38 </configuration>

    8、双击打开“Log4netTest”项目中的“Program.cs”文件,修改该文件如下所示:

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 
     7 namespace Log4netTest
     8 {
     9     class Program
    10     {
    11         static void Main(string[] args)
    12         {
    13             Log4netUtil.Log4netHelper.Info("Info信息!");
    14         }
    15     }
    16 }

      运行控制台应用程序,我们即可看到日志文件正确生成!

      源码下载

  • 相关阅读:
    Spark学习笔记2(spark所需环境配置
    Spark学习笔记1(初始spark
    zookeeper基本讲解及基本命令和配置 (转)
    计算机网络面试常考(转载)
    C++面试笔试题汇总
    复杂指针解析
    如何限制一个类对象只在栈(堆)上分配空间?
    虚函数实现机制
    C++内存分配方式详解
    C++中指针和引用的区别(转载)
  • 原文地址:https://www.cnblogs.com/yonghuacui/p/6183665.html
Copyright © 2020-2023  润新知