我在外部研究和StackOverflow/Progammers.StackExchange
上都很难找到关于这个主题的信息,所以我想我会问这里。这主要是'最佳实践'问题,但我也对性能影响感兴趣。
背景:
我目前在具有支持Windows服务组件的WinForms
应用程序中使用NLog日志记录框架。我在我的测试应用程序中有很多跟踪日志语句,我通过UDP输出监视。错误/警告也会转到事件日志和滚动日志文件,这些文件也包括INFO级别。
问题:
在编译应用程序的发布版本时,处理所有日志记录代码的最佳做法是什么?是否应该从应用程序中删除所有跟踪/调试代码,因为它可能会对性能产生负面影响?由于NLog日志记录由XML
配置文件控制,因此删除跟踪/调试日志记录的监听器可以消除潜在的性能缺陷吗?我是否应该在预处理程序指令中放置跟踪/调试日志记录元素,以防止它们被编译为可释放的生产代码?
答案 0 :(得分:1)
处理所有日志记录代码的最佳做法是什么时候 编译应用程序的发布版本?
您可以保留日志记录调用,并使用日志级别控制行为。
应该从应用程序中删除所有跟踪/调试代码 会对绩效产生负面影响吗?
你是对的,日志记录会对性能产生负面影响。多少取决于how often you log and the logging output
。您应该将日志记录限制为关键内容,这有助于诊断某些事项或排除问题/异常。
由于NLog日志记录由XML配置文件控制,因此 删除侦听器以进行跟踪/调试日志记录消除了潜力 性能陷阱?
是。如果您将日志级别设置为Off
,那么您将获得性能。例如,因为没有IO操作了。唯一的成本是检查日志框架中的loglevels。
我是否应该在其中放置跟踪/调试日志记录元素 预处理程序指令,以防止它们被编译成可释放的 生产代码?
这将再次提高性能。但是,您无法获得生产中的任何诊断信息以解决问题。使用日志级别时,这是可能的。