如何使用 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>
现在,你可以在
节点之后添加一个
节点,在
节点内部添加如下的详细配置信息。
<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 的所有配置,接下来简单浏览下这些配置信息,这里我在
属性中指定了 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 配置。
转至微信公众号:码农读书