有人都有经验吗?他们如何相互叠加?
我们计划使用其中一个登录企业应用程序 .
参考文献:
log4net
nlog
编辑:我们没有nlog或log4net的现有依赖项 .
我认为普遍的共识是nlog更容易配置和使用 . 但两者都很有能力 .
根据我的经验,SmartInspect击败了NLog和log4net .
它非常易于使用,文档很棒,而且您可以使用他们的交互式日志查看器,这是一个巨大的现实世界优势 .
我喜欢的一件事是数据的标签视图,例如Chrome中的浏览器标签 . 每个选项卡都可以提供不同的日志过滤视图 .
我运行的一个开源项目的无耻插件,但考虑到关于哪个.NET日志框架更活跃的热烈讨论,我想我会发布一个强制性链接到Serilog .
要在应用程序中使用,Serilog与log4net类似(并且大量使用) . 但是,与其他.NET日志记录选项不同,Serilog是为了保留用于离线分析的日志事件的结构 . 当你写:
Log.Information("The answer is {Answer}", 42);
大多数日志库会立即将消息呈现为字符串 . Serilog也可以这样做,但它会保留 { Answer: 42 } 属性,以便稍后使用多个NoSQL数据存储之一,您可以根据 Answer 的值正确查询事件 .
{ Answer: 42 }
Answer
我们接近1.0并支持所有现代(.NET 4.5,Windows Store和Windows Phone 8)平台 .
我也是第二个NLog,因为它也适用于非托管代码 . 我想可能一起使用log4net和log4cxx,但NLog可以开箱即用地处理托管和非托管代码 .
我还查看了Common.Logging,这是一个抽象记录api的外观,它支持log4net,NLog和Entreprise Library . 我不会使用它,但我喜欢他们如何在禁用日志记录时使用lambdas来提高性能(与NLog和其他人共享的功能) .
您可能还会考虑Microsoft Enterprise Library Logging Block . 它配备了漂亮的设计师 .
我最近的任务是为即将到来的项目“原型化一些登录” . 我没有任何日志框架经验 . 我在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 . 尽管有其他解决方案,但还是不足以使用它 .
尚未讨论过的关键考虑因素是支持和更新 .
Log4Net hasn't been updated since version 1.2.10 was published April 19, 2006 .
相比之下,NLog自2006年以来一直得到积极支持,很快就会发布NLog 2.0 supporting many platforms that didn't exist when log4net was last updated,例如:
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 Profiles
最近有过这两个框架的经验,我想我可以分享我对每个框架的看法 .
我被要求评估现有Web应用程序的日志框架,在通过各种在线论坛后,我将选择范围缩小到NLog(v2.0)和log4net(v1.2.11) . 以下是我的发现:
设置/启动NLog很容易 . 您在他们的网站上浏览了入门教程,您就完成了 . 你得到一个公平的想法,nlog的情况如何 . 配置文件非常直观,任何人都可以理解配置 . 例如:如果要设置内部日志记录,则在Nlog配置文件的标头节点中设置标志,这是您期望的标志 . 在log4net中,您可以在web.config的appSettings部分中设置不同的标志 .
在log4net中,内部日志记录不输出令人讨厌的时间戳 . 在Nlog中,您可以获得带有时间戳的漂亮日志 . 我发现它在我的评估中非常有用 .
log4net中的过滤器 - 您最好查看我的这个问题 - log4net filter - how to write AND filter to ignore log messages如果您找到答案/解决方案,请告诉我 . 我知道,这个问题有一个解决方法,因为您可以编写自己的自定义过滤器 . 但是在log4net中不容易获得的东西 .
性能 - 我使用存储过程将大约3000条日志消息记录到数据库 . 我使用简单的for循环(int i = 0; i <3000; i ...将相同的消息记录3000次 . 对于写入:log4net AdoAppender花费的时间几乎是NLog的两倍 .
Log4net不支持异步appender .
它是我可以选择NLog作为日志框架 . :)
对于任何迟到这个帖子的人,你可能想回顾一下.Net基类库(BCL) . 当引入 TraceSource 类(大约2005年)时,许多人错过了.Net 1.1和.Net 2.0之间的变化 .
使用TraceSource与其他日志记录框架类似,具有对日志记录的精细控制,app.config / web.config中的配置以及编程访问 - 无需企业应用程序块的开销 .
还有一些比较浮动:“log4net vs TraceSource”
对我们来说,关键的区别在于整体性能......
看看NLog与Log4Net中的 Logger.IsDebugEnabled ,从我们的测试来看,NLog的开销较小,这就是我们所追求的(低延迟的东西) .
Logger.IsDebugEnabled
干杯,弗洛里安
首先看一下堆栈的其余部分 .
如果您使用的是NHibernate,它会直接使用Log4Net . 其他框架可能还有其他需要的特定 Logger .
除此之外:两者都很好 .
我自己已经确定了Log4Net . 配置可能会很痛苦,如果配置不正确,找出问题是很痛苦的 . 但是你可以让它做任何你想要的 Logger .
如果你没有Log4Net的常见问题,这里有一篇关于如何开始使用它的文章:http://elegantcode.com/2007/12/07/getting-started-with-log4net/
嗯..我使用Enterprise库进行数据库记录任务,现在由于性能瓶颈我切换到NLog .
一些比较信息:
http://pauliusraila.blogspot.com/2010/10/solving-database-logging-bottlenecks.html
我回应上面的内容并且更喜欢nLog . Entlib不必要地臃肿 .
Re:Log4net总是让我使用log4net的一件事是忘记将以下内容添加到global.asax来初始化组件:
log4net.Config.XmlConfigurator.Configure();
如果你去here,你可以找到一个全面的矩阵,包括NLog和Log4Net库以及Enterprise Lib和其他产品 .
有人可能会争辩说矩阵是以强调矩阵中唯一商业lib的特征的方式完成的 . 我认为这是真的,但无论如何,它对NLog来说是有用的 .
问候
正如我注意到的,log4net在应用程序运行的整个过程中锁定了它们的输出文件,因此您无法删除它们 . 否则他们是相似的 .
所以我更喜欢NLog .
15 回答
我认为普遍的共识是nlog更容易配置和使用 . 但两者都很有能力 .
根据我的经验,SmartInspect击败了NLog和log4net .
它非常易于使用,文档很棒,而且您可以使用他们的交互式日志查看器,这是一个巨大的现实世界优势 .
我喜欢的一件事是数据的标签视图,例如Chrome中的浏览器标签 . 每个选项卡都可以提供不同的日志过滤视图 .
我运行的一个开源项目的无耻插件,但考虑到关于哪个.NET日志框架更活跃的热烈讨论,我想我会发布一个强制性链接到Serilog .
要在应用程序中使用,Serilog与log4net类似(并且大量使用) . 但是,与其他.NET日志记录选项不同,Serilog是为了保留用于离线分析的日志事件的结构 . 当你写:
大多数日志库会立即将消息呈现为字符串 . 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 . 我不会使用它,但我喜欢他们如何在禁用日志记录时使用lambdas来提高性能(与NLog和其他人共享的功能) .
您可能还会考虑Microsoft Enterprise Library Logging Block . 它配备了漂亮的设计师 .
我最近的任务是为即将到来的项目“原型化一些登录” . 我没有任何日志框架经验 . 我在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 . 尽管有其他解决方案,但还是不足以使用它 .
尚未讨论过的关键考虑因素是支持和更新 .
Log4Net hasn't been updated since version 1.2.10 was published April 19, 2006 .
相比之下,NLog自2006年以来一直得到积极支持,很快就会发布NLog 2.0 supporting many platforms that didn't exist when log4net was last updated,例如:
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 Profiles
最近有过这两个框架的经验,我想我可以分享我对每个框架的看法 .
我被要求评估现有Web应用程序的日志框架,在通过各种在线论坛后,我将选择范围缩小到NLog(v2.0)和log4net(v1.2.11) . 以下是我的发现:
设置/启动NLog很容易 . 您在他们的网站上浏览了入门教程,您就完成了 . 你得到一个公平的想法,nlog的情况如何 . 配置文件非常直观,任何人都可以理解配置 . 例如:如果要设置内部日志记录,则在Nlog配置文件的标头节点中设置标志,这是您期望的标志 . 在log4net中,您可以在web.config的appSettings部分中设置不同的标志 .
在log4net中,内部日志记录不输出令人讨厌的时间戳 . 在Nlog中,您可以获得带有时间戳的漂亮日志 . 我发现它在我的评估中非常有用 .
log4net中的过滤器 - 您最好查看我的这个问题 - log4net filter - how to write AND filter to ignore log messages如果您找到答案/解决方案,请告诉我 . 我知道,这个问题有一个解决方法,因为您可以编写自己的自定义过滤器 . 但是在log4net中不容易获得的东西 .
性能 - 我使用存储过程将大约3000条日志消息记录到数据库 . 我使用简单的for循环(int i = 0; i <3000; i ...将相同的消息记录3000次 . 对于写入:log4net AdoAppender花费的时间几乎是NLog的两倍 .
Log4net不支持异步appender .
它是我可以选择NLog作为日志框架 . :)
对于任何迟到这个帖子的人,你可能想回顾一下.Net基类库(BCL) . 当引入 TraceSource 类(大约2005年)时,许多人错过了.Net 1.1和.Net 2.0之间的变化 .
使用TraceSource与其他日志记录框架类似,具有对日志记录的精细控制,app.config / web.config中的配置以及编程访问 - 无需企业应用程序块的开销 .
还有一些比较浮动:“log4net vs TraceSource”
对我们来说,关键的区别在于整体性能......
看看NLog与Log4Net中的
Logger.IsDebugEnabled
,从我们的测试来看,NLog的开销较小,这就是我们所追求的(低延迟的东西) .干杯,弗洛里安
首先看一下堆栈的其余部分 .
如果您使用的是NHibernate,它会直接使用Log4Net . 其他框架可能还有其他需要的特定 Logger .
除此之外:两者都很好 .
我自己已经确定了Log4Net . 配置可能会很痛苦,如果配置不正确,找出问题是很痛苦的 . 但是你可以让它做任何你想要的 Logger .
如果你没有Log4Net的常见问题,这里有一篇关于如何开始使用它的文章:http://elegantcode.com/2007/12/07/getting-started-with-log4net/
嗯..我使用Enterprise库进行数据库记录任务,现在由于性能瓶颈我切换到NLog .
一些比较信息:
http://pauliusraila.blogspot.com/2010/10/solving-database-logging-bottlenecks.html
我回应上面的内容并且更喜欢nLog . Entlib不必要地臃肿 .
Re:Log4net总是让我使用log4net的一件事是忘记将以下内容添加到global.asax来初始化组件:
如果你去here,你可以找到一个全面的矩阵,包括NLog和Log4Net库以及Enterprise Lib和其他产品 .
有人可能会争辩说矩阵是以强调矩阵中唯一商业lib的特征的方式完成的 . 我认为这是真的,但无论如何,它对NLog来说是有用的 .
问候
正如我注意到的,log4net在应用程序运行的整个过程中锁定了它们的输出文件,因此您无法删除它们 . 否则他们是相似的 .
所以我更喜欢NLog .