Answers:
我最近受命为即将到来的项目“原型化一些登录”。我没有任何日志记录框架的经验。我在Log4Net,NLog和Enterprise Library上研究,浏览了教程,制作了玩具应用程序,等等。3-4周后回来,将它们放在一起进行演示。希望其中一些对您有用。
我对我们的项目的建议是:
这是基于以下发现(观点!):
显然,到目前为止,我喜欢NLog。尽管有其他解决方案,但仍不足以使用它。
尚未讨论的关键考虑因素是支持和更新。
自2006年4月19日发布1.2.10版以来,Log4Net尚未更新。。
相比之下,自2006年以来一直积极支持NLog,因为它将很快发布NLog 2.0,它支持上次更新log4net时不存在的许多平台,例如:
最近在这两个框架上都有经验,我认为我可以就每个框架分享自己的观点。
我被要求评估现有Web应用程序的日志记录框架,在经历各种在线论坛后,我将选择范围缩小到NLog(v2.0)和log4net(v1.2.11)。这是我的发现:
使用NLog进行设置/启动非常简单。您在他们的网站上浏览了“入门指南”,然后就完成了。您有一个不错的主意,nlog会是什么样子。配置文件非常直观,任何人都可以理解配置。例如:如果要设置内部登录,请在Nlog配置文件的头节点中设置该标志,这是您期望的位置。在log4net中,您可以在web.config的appSettings部分中设置不同的标志。
在log4net中,内部日志记录不会输出令人讨厌的时间戳。在Nlog中,您会获得带有时间戳的漂亮日志。我发现它对我的评估非常有用。
log4net中的过滤器-您最好检查一下我的问题-log4net过滤器-如何编写AND过滤器以忽略日志消息,如果您找到答案或解决方案,请告诉我。我了解,此问题有解决方法,因为您可以编写自己的自定义过滤器。但是有些东西在log4net中不容易获得。
性能-我使用存储过程将大约3000条日志消息记录到数据库中。我使用了简单的for循环(int i = 0; i <3000; i ++ ...)记录了3000条相同的消息。对于日志记录:log4net AdoAppender花费的时间几乎是NLog的两倍。
Log4net不支持异步附加程序。
选择NLog作为日志记录框架对我来说已经足够了。:)
对于迟到使用此线程的任何人,您可能需要回顾一下.Net基类库(BCL)。TraceSource时,许多人都错过了.Net 1.1和.Net 2.0之间的更改引入类时(大约在2005年),。
使用TraceSource与其他日志记录框架类似,具有对日志记录的精细控制,app.config / web.config中的配置以及编程访问-无需增加企业应用程序块的开销。
也有许多比较:“ log4net vs TraceSource”
对我们而言,关键区别在于总体性能...
看一下Logger.IsDebugEnabled
NLog与Log4Net,从我们的测试来看,NLog的开销较小,这就是我们所追求的(低延迟的东西)。
干杯,弗洛里安
首先看一下堆栈的其余部分。
如果您使用的是NHibernate,它将直接利用Log4Net。其他框架可能需要其他特定的记录器。
除此之外:两者都能正常工作。
我本人已经决定使用Log4Net。配置可能会很痛苦,如果配置不正确,那么就会弄清楚出了什么问题。但是您可以使其几乎完成记录器想要的任何事情。
如果您没有Log4Net的长期问题,这是我写的关于如何开始使用它的文章:http : //elegantcode.com/2007/12/07/getting-started-with-log4net/
好吧..我使用企业库来执行数据库记录任务,由于性能瓶颈,现在我切换到了NLog。
一些比较信息:
http://pauliusraila.blogspot.com/2010/10/solving-database-logging-bottlenecks.html
我回应以上内容,并且确实更喜欢nLog。Entlib不必要地肿。
Re:Log4net总是使我受益于log4net的一件事就是忘记将以下内容添加到global.asax中以初始化组件:
log4net.Config.XmlConfigurator.Configure();
正如我注意到的那样,log4net在整个应用程序运行期间会锁定它们的输出文件,因此您无法删除它们。否则它们是相似的。
所以我更喜欢NLog。
我为一个开源项目运行的无耻插件,但是鉴于关于哪个.NET日志记录框架更活跃的热烈讨论,我认为我应该发布一个必不可少的Serilog链接。
要在应用程序中使用,Serilog与log4net相似(并大量使用)。但是,与其他.NET日志记录选项不同,Serilog是关于保留日志事件的结构以供脱机分析的。当你写:
Log.Information("The answer is {Answer}", 42);
大多数日志记录库会立即将消息呈现为字符串。Serilog也可以做到这一点,但是它保留了该{ Answer: 42 }
属性,以便以后使用多个NoSQL数据存储库之一,可以根据的值正确查询事件Answer
。
我们已经接近1.0,并且支持所有现代(.NET 4.5,Windows Store和Windows Phone 8)平台。
我也支持NLog,因为它也适用于非托管代码。我想可能可以同时使用log4net和log4cxx,但是NLog可以开箱即用地处理托管和非托管代码。
我还看过Common.Logging,它是对日志记录api的抽象,它支持log4net,NLog和Entreprise Library。我认为我不会使用它,但是我喜欢他们在禁用日志记录时使用lambda来提高性能(与NLog以及其他可能共享的功能)。
您可能还会考虑Microsoft Enterprise Library Logging Block。它带有不错的设计师。
根据我的经验,SmartInspect胜过NLog和log4net。
它非常易于使用,文档很棒,您可以查看和过滤以前记录的消息使用其交互式日志查看器,这在现实世界中是一个巨大的优势。
我喜欢的一件事是数据的选项卡式视图,例如Chrome中的浏览器选项卡。每个选项卡都可以提供日志的不同过滤视图。