日志框架对比 NLog VS Log4net

Log4net

先说Log4net,它是.net平台上一个老牌的日志框架,我接触的时间也不长(由于公司有本身的日志库),可是看着各开源库都在用这个因而前段时间也尝试去了解了一下。html

首先让我认识到Log4net强大的地方就是它的多目标输出,能够输出到控制台、文件、数据库、系统事件、Email等,几乎无所不能。而后它能够经过配置让日志系统实时生效,好比说在服务运行的过程当中修改配置改变输出目标,改变日志等级等,均不用重启程序。可是Log4net也有一个让我比较头痛的地方就是感受配置过于复杂,根本记不住,每次都必须去查阅资料,因而乎以前我也针对Log4net作了一个简单的封装,内嵌了一个默认使用文件存储的日志配置,提供静态日志方法,还提供一套性能统计的API(貌似Visual Studio 2015后IDE已自带了)。如下是这个封装的源代码地址:github,nuget地址:nugetgit

NLog

下面说说为何又关注起NLog了,Nlog没有Log4net老牌,使用从Nuget下载量来看也没有Log4net用户量大,可是它却一直在保持高速的更新状态,从github主页上看它所支持的平台也至关普遍,从.net环境到mono再到如今最新的Xamarin均支持:
nlog支持范围github

比较

下面这个是一篇比较这两种日志的文章,应该是翻译的StackOverFlow再加上做者本身的一些看法: http://www.cnblogs.com/wanglee/archive/2013/05/22/3092474.html数据库

下面是总结的几点apache

项目 log4net nlog
流行程度
易用性
动态配置
输出目标
跨平台
开源持续维护
日志性能

性能比较(再也不有效,详见文末)

这是用这两款日志框架写的一个性能比较的Demo,暂时只比较了文件记录日志的状况(由于相对来讲这种状况应该是最多的),附上源码地址
性能比较结果如图,分别是Debug条件编译下的单线程和并行多线程以及独占锁和最小冲突锁的状况:
多线程

性能比较结果

2017年9月1日更新:

以上性能测试再也不有效,根据网友反馈,因为输出内容的略有差别致使上面性能测试出现不公平的状况,log4Net在输出时可能会有更多的计算量。在优化测试代码状况下,仅让日志框架打印日志内容,其他的包括时间、日志等级、日志类名一概不打印,使用最新版Dll,两个框架性能相差无几。框架

推荐阅读
NET开源项目介绍及资源推荐:http://www.cnblogs.com/Terrylee/archive/2006/12/03/opensource_framework_and_resource_recommendation_Log.html开源项目介绍

附加连接
log4net:https://logging.apache.org/log4net/
NLog:https://github.com/NLog/NLog性能

相关文章
相关标签/搜索