当前位置:  开发笔记 > 前端 > 正文

log4net与Nlog

如何解决《log4net与Nlog》经验,为你挑选了12个好方法。

有人都有经验吗?他们如何相互叠加?

我们计划使用其中一个登录企业应用程序.

参考文献:

log4net的

n日志

编辑:我们没有nlog或log4net的现有依赖项.



1> Matt..:

我最近的任务是为即将到来的项目"原型化一些登录".我没有任何日志框架经验.我在Log4Net,NLog和Enterprise Library上研究,编写了教程,制作了玩具应用程序等几天.3-4周后回来并将它们组合成一个有凝聚力的演示.希望其中一些对您有用.

我对我们项目的建议如下:

    使用日志记录外观(例如Common.Logging,SimpleLoggingFacade)来避免直接依赖.

    如果我们最终将Enterprise Library用于其他工具,那么也将它用于Logging.

    如果我们最终使用依赖于Log4Net的东西,请使用Log4Net.

    如果不是,请使用NLog.我更喜欢哪个.

这是基于这些发现(意见!):

所有3个框架都有能力,可以做一些复杂的事情.我们想要一个高质量的解决方案,但坦率地说,不需要超高性能或60种类型的事件接收器.

所有3个都有非常相似的基本概念.

每个都有自己的酷技巧,如真正的高级路由,或动态日志文件名,文件截断等.

所有3个都以自己的方式记录得非常好.

对于像我这样的完整新手,他们最初都有点尴尬.这里的基础知识没有太大差异.我克服了它.

几周后再次访问时,NLog 显然是最容易恢复的.我需要很少刷上它.使用Log4Net,我不得不重新访问一些在线示例才能开始.使用EntLib,我放弃了,从头开始重新完成教程 - 我完全迷失了.

我无法弄清楚如何让EntLib做一些事情,比如登录数据库.这可能很容易,但它超出了我的时间限制.

Log4Net和NLog的代码占用空间很小.EntLib是垃圾邮件,但无论如何我都会使用它.

我不小心错误配置了EntLib,它在运行时告诉我.Log4Net没有.我没有与NLog意外错误配置.

EntLib带有一个漂亮的app.config编辑器,你100%需要它.NLog有一个配置文件架构,因此您可以获得"intellisense".Log4Net附带nada.

所以很明显我到目前为止都喜欢NLog.尽管有其他解决方案,但还是不足以使用它.


只有你可以在不破坏依赖于调用堆栈等的诊断值的情况下才能使用外观.我已经看到许多外观打破了这些必要的诊断功能,最终造成了更多的伤害......
NLog得到了积极的支持(http://nlog-project.org/download),而Log4Net自2006年4月19日发布的1.2.10版本以来一直没有更新(https://issues.apache.org/jira/browse/log4net的/ fixforversion/11128)
+1建议建立一个真正的关注点(SoC)门面,或者你不要对你的域进行民意调查.
Log4Net尚不支持.NET 3.5 SP1和.NET 4的客户端配置文件,因为它引用了System.Web.只是想指出这一点,虽然它实际上与"依赖Log4Net密切相关,但使用Log4Net".
如果您使用log4net依赖于库并且想要使用NLog(反之亦然),那么编写和配置自定义Appender类来桥接这两者是相当简单的.
我想补充一点,Log4Net最近更新到1.2.11,现在增加了对.NET 4.0的支持以及.NET 3.5和.NET 4.0的客户端配置文件.
@CiaranGallagher - 对不起,我不再看这个问题了.您的评论将成为其他地方讨论的好问题!对我来说,当时,"Facade"将是a)简化EntLib的详细方法调用和b)因此我们可以在不改变整个应用程序的代码的情况下切换记录器.由于频繁的技术领导更替以及我们的技术堆栈方向的相关变化,后者是一个问题.FWIW,我会做一个非常简单的~4函数自定义界面,并没有使用Pat建议的日志记录界面库(不要解散它们).
我注意到RavenDB使用的是Nlog.Ayenede并不以选择糟糕的代码和框架而闻名.记住Nhibernate已经存在很长时间了(可能)早于Nlog.此外,如果您使用Raven,那么显然Nlog已经存在.如果你打算使用Raven,那么就可以进行一些Nlog练习.如果没有太多关于它的话,我倾向于关注Ayende在.NET相关方面的领先优势.

2> Jay Cincotta..:

尚未讨论过的关键考虑因素是支持和更新.

自版本1.2.10于2006年4月19日发布以来,Log4Net尚未更新.

相比之下,NLog自2006年以来一直得到积极支持,很快就会发布NLog 2.0,支持上次更新log4net时不存在的许多平台,例如:

NET Framework 2.0 SP1及更高版本,3.5和4.0(客户端和扩展配置文件)

Silverlight 2.0,3.0,4.0

.NET Compact Framework 2.0,3.5

Mono 2.x个人资料


实际上,这个答案对我来说仍然很有价值.我正在选择一个记录器,这个答案告诉我们log4net在过去五年中已经更新了一次,而NLog是一个更活跃的项目.
[log4net于2011年10月推出了v1.2.11](https://issues.apache.org/jira/browse/LOG4NET).我认为这个答案现在已经过时了.
但它需要更新吗?如果没有损坏,请不要修理它?
**被破坏:*在Vista和Win7上为localhost分辨IPv4/IPv6之间的IP地址解析(几个非官方补丁在左右浮动)*不能在.Net 4.0 Client Profile中编译
似乎有一个适用于Log4Net的.NET 4.0版本.
由于NLog 2.0已经发布,它也没有任何反应.他们的网站表明他们正在积极寻找某人接管整个项目.所以我猜你真的不能称NLog"更活跃".

3> Narayan Akha..:

最近有过这两个框架的经验,我想我可以分享我对每个框架的看法.

我被要求评估现有Web应用程序的日志框架,在通过各种在线论坛后,我将选择范围缩小到NLog(v2.0)和log4net(v1.2.11).以下是我的发现:

    使用NLog进行设置/启动非常容易.您在他们的网站上浏览了入门教程,您就完成了.你得到一个公平的想法,nlog的情况如何.配置文件非常直观,任何人都可以理解配置.例如:如果要设置内部日志记录,则在Nlog配置文件的标头节点中设置标志,这是您期望的标志.在log4net中,您可以在web.config的appSettings部分中设置不同的标志.

    在log4net中,内部日志记录不会输出令人讨厌的时间戳.在Nlog中,您可以获得带有时间戳的漂亮日志.我发现它在我的评估中非常有用.

    log4net中的过滤器 - 您最好检查我的这个问题 - log4net过滤器 - 如何编写和过滤以忽略日志消息,如果您找到答案/解决方案,请告诉我.我知道,这个问题有一个解决方法,因为您可以编写自己的自定义过滤器.但是在log4net中不容易获得的东西.

    性能 - 我使用存储过程将大约3000条日志消息记录到数据库.我使用简单的for循环(int i = 0; i <3000; i ++ ...将相同的消息记录3000次.对于写入:log4net AdoAppender花费的时间几乎是NLog的两倍.

    Log4net不支持异步appender.

对我来说,选择NLog作为日志框架是足够的比较.:)



4> Jeremy..:

对于任何迟到这个帖子的人,你可能想回顾一下.Net基类库(BCL).当引入TraceSource类(大约2005年)时,许多人错过了.Net 1.1和.Net 2.0之间的变化.

使用TraceSource很是类似其它日志框架,具有记录的精细的控制,在的app.config/web.config配置和编程访问 - 没有企业应用程序块的开销.

.Net BCL团队博客:追踪简介 - 第一部分 (见第二部分a,b,c)

还有一些比较浮动:"log4net vs TraceSource"



5> Florian Doyo..:

对我们来说,关键的区别在于整体性能......

Logger.IsDebugEnabled从NLog和Log4Net 看一下,从我们的测试来看,NLog的开销较少,这就是我们所追求的(低延迟的东西).

干杯,弗洛里安



6> Chris Brands..:

首先看一下堆栈的其余部分.

如果您使用的是NHibernate,它会直接使用Log4Net.其他框架可能还有其他需要的特定记录器.

除此之外:两者都很好.

我自己已经确定了Log4Net.配置可能会很痛苦,如果配置不正确,找出问题是很痛苦的.但是你可以让它做任何你想要的记录器.

如果你没有Log4Net的常见问题,这里有一篇关于如何开始使用它的文章:http: //elegantcode.com/2007/12/07/getting-started-with-log4net/


@greg:请注意,在NHibernate v3中,感谢删除对log4net的依赖 - 它是可插拔的,因此如果您愿意,可以使用NLog.

7> 小智..:

嗯..我使用Enterprise库进行数据库记录任务,现在由于性能瓶颈我切换到NLog.

一些比较信息:

http://pauliusraila.blogspot.com/2010/10/solving-database-logging-bottlenecks.html



8> Francis Shan..:

我回应上面的内容并且更喜欢nLog.Entlib不必要地臃肿.

Re:Log4net总是让我使用log4net的一件事是忘记将以下内容添加到global.asax来初始化组件:

log4net.Config.XmlConfigurator.Configure();



9> Lorenzo..:

如果你到这里,你可以找到一个全面的矩阵,包括NLog和Log4Net库以及Enterprise Lib和其他产品.

有人可能会争辩说矩阵是以强调矩阵中唯一商业lib的特征的方式完成的.我认为这是真的,但无论如何,它对NLog来说是有用的.

问候



10> Vitaliy Ulan..:

正如我注意到的,log4net在应用程序运行的整个过程中锁定了它们的输出文件,因此您无法删除它们.否则他们是相似的.

所以我更喜欢NLog.


添加到您的fileappender配置中以防止这种情况(在log4net示例页面上提到:http://logging.apache.org/log4net/release/config-examples. HTML)

11> Nicholas Blu..:

我运行的一个开源项目的无耻插件,但考虑到关于哪个.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)平台.



12> 小智..:

我也是第二个NLog,因为它也适用于非托管代码.我想可能一起使用log4net和log4cxx,但NLog可以开箱即用地处理托管和非托管代码.

我还查看了Common.Logging,它是一个用于抽象记录api的外观,它支持log4net,NLog和Entreprise Library.我不认为我会使用它,但我喜欢他们如何在禁用日志记录时使用lambdas来提高性能(与NLog和其他人共享的功能).

推荐阅读
LEEstarmmmmm
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有