译文链接: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 配置。