如何使用 C# 中的 log4net 记录日志

Posted 小市民在西河

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用 C# 中的 log4net 记录日志相关的知识,希望对你有一定的参考价值。

译文链接:https://www.infoworld.com/article/3120909/how-to-work-with-log4net-in-c.html

在项目开发时,你可能想记录一些应用程序日志,这些日志包括:应用程序执行流,用户行为数据或者程序的一些报错信息,在 .NET 世界中有非常多的日志框架,然而 log4net 是目前为止最流行的一款日志框架,它是一款开源的项目(java 的 log4j 开源移植版),并且可以将应用程序日志输出到不同的 target 中,eg:数据库,文件,redis,elasticsearch 等等。

安装 log4net

使用 NuGet Package Manager 是安装 log4net 最简单也是最快速的方式,假设你已经在 Visual Studio 中创建了一个 Console Application 项目,你可以通过 Nuget Manager 按照下面的步骤一步一步的进行安装。

  • 在 Solution Explorer Window 的 project 上点击右键。

  • 点击 Manage NuGet Packages

  • 点击 Online 并且在输入框中搜索 log4net

  • 然后选择你需要安装的 log4net 包。

  • 点击 Install 开始进行包安装

可以参考下面的图:

到目前为止,最新的 log4net 版本是 2.0.12,稍等片刻你会在 NuGet Package Manager 中观察到 log4net 已经成功安装,同时你应该可以观察到 log4net 已成功添加到 project项目的 引用列表中了,如下图:

配置 log4net

现在你的 log4net 已经被成功安装,project 的 Properties 文件夹下有一个 AssemblyInfo.cs 文件,在这个文件中增加如下行,如果你没有一些自定义的配置,可以不用考虑下面的方式。


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

作为替代方案,你可以将 log4net 的配置直接送到 app.config 或者 web.config 中,使用如下配置:


[assembly: log4net.Config.XmlConfigurator(Watch = true)]

有时候,你可能不想把 log4net 的配置信息放在 app.config 或者 web.config 中,这时候你可以专门指定一个配置文件,比如:log4net.config。


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

接下来就需要在 app.config 或者 web.config 中指定 log4net 的一些详细配置信息了,假定你使用的是 console 应用程序,在 configSections 节点中新增一个名称为 log4net 的 section 节点,如下代码所示:


<configSections>
   <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>

现在,你可以在 <configSections/> 节点之后添加一个 <log4net></log4net> 节点,在 <log4net></log4net> 节点内部添加如下的详细配置信息。


<log4net>
   <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
     <param name="File" value="C:\\Projects\\Personal\\IDG\\IDG.log"/>
     <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
     <appendToFile value="true" />
     <rollingStyle value="Size" />
     <maxSizeRollBackups value="10" />
     <maximumFileSize value="1MB" />
     <staticLogFileName value="true" />
     <layout type="log4net.Layout.PatternLayout">
       <conversionPattern value="%date [%thread] %level %logger - %message%newline" />
     </layout>
   </appender>
   <root>
     <level value="ALL" />
     <appender-ref ref="LogFileAppender" />
   </root>
</log4net>

这就是 log4net 的所有配置,接下来简单浏览下这些配置信息,这里我在 <appender /> 属性中指定了 logger 的 name 和 type,在这个例子中我使用的是RollingFileAppender,其实 log4net 支持很多种的 Appender,比如 AdoNetAppender,AspNetTraceAppender,ConsoleAppender 等等,更多的 Appender 设定可以看看这个链接:http://logging.apache.org/log4net/release/config-examples.html

使用 log4net

接下来可以写代码了,用 LogManager 类的 静态方法 GetLogger 来创建一个实例,这个实例实现了 ILog 接口,如下代码所示:


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

现在你可以使用这个 log 实例去记录日志到你指定的 target 中,下面的代码段就展示了如何利用 log 去记录日志。


log.Debug("This is a Debug message");
log.Info("This is a Info message");
log.Warn("This is a Warning message");
log.Error("This is an Error message");
log.Fatal("This is a Fatal message");

下面是一个完整的代码清单,使用 log4net 去记录异常信息到一个 text 文本中。


class Program
   {
       static readonly log4net.ILog log =
       log4net.LogManager.GetLogger
(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
       static void Main(string[] args)
       {
           try
           {
               throw new Exception("This is test message...");
           }
           catch(Exception ex)
           {
               log.Error(ex.Message);
           }          
           Console.Read();
       }
   }

执行完上面的程序之后,IDG.log 日志文件就会生成,里面会有一条我指定的异常信息,再配上一条当时记录日志的时间,这个时间信息非常重要,最后,除了本篇介绍的用 配置文件 的形式进行配置,你也可以通过编程的方式进行 log4net 配置。



以上是关于如何使用 C# 中的 log4net 记录日志的主要内容,如果未能解决你的问题,请参考以下文章

多线程代码执行的 Log4Net C# 日志记录问题

c#中使用log4net工具记录日志

C#中使用Log4记录日志

C#中使用Log4记录日志

C#上位机开发(十三)—— 使用Log4net添加日志记录功能

C#上位机开发(十三)—— 使用Log4net添加日志记录功能