使用ServiceStack.Logging.NLog而不是直接NLog调用有什么缺点?

时间:2013-07-18 10:25:34

标签: logging servicestack nlog

由于https://robertmccarter.com/switching-to-nlog

中描述的多种原因,我喜欢NLog

log4net vs. Nlog

但我考虑一下 https://github.com/ServiceStack/ServiceStack,并 https://nuget.org/packages/ServiceStack.Logging.NLog保留通用接口和将来切换到其他提供商的能力。

是否有人了解使用ServiceStack.Logging.NLog的任何缺点/限制 而不是直接的NLog电话?

它会导致任何重要的性能下降吗?

直接调用NLog记录器时是否可以使用任何功能,但不受支持 ServiceStack?

2 个答案:

答案 0 :(得分:5)

我比较过 ServiceStack ILogCommon.Logging/ILogNLog/Logger.cs 并发现NLog具有更多的重载次数,这使其更加类型安全。如果禁用特定记录的日志记录,NLog也有逻辑不处理格式化。

基于此,我决定使用通用日志记录界面是YAGNI。如果我要编写库以在多个应用程序中使用,可能使用不同的日志库, ServiceStack是一种可行的方式。

然而,在没有立即需要支持多个日志记录框架的应用程序开发中,直接调用Nlog更有效。 如果将来决定切换到其他提供商,则全局替换更改以进行呼叫 ServiceStack 或直接新提供者应该相对容易。

答案 1 :(得分:3)

快速回答是 - 您应该通过其通用日志记录界面使用ServiceStack NLog实现。看起来它可以为您提供所需的一切。

您可以查看ServiceStack NLog实施代码@ https://github.com/ServiceStack/ServiceStack.Logging/tree/master/src/ServiceStack.Logging.NLog

我假设你仍然可以通过NLog.config文件配置NLog,并且默认的NLogFactory会选择它 - 所以这仍然允许你做一些事情,比如特定于记录器的路由,多个目标等。

性能下降不会成为一个问题(除非你详细记录生产中的每一件小事,但那是你的,而不是框架)。

如果没有全面详细地介绍NLog实现,我不能说你将通过ServiceStack NLog获得所有功能 - 但是就你需要记录你的代码而言,你会很高兴去