2011-06-21 43 views
2

我有一个使用NLog进行跟踪的C#中的大型应用程序(> 50k loc),并且跟踪已经有些失去控制。一些图书馆拥有适当的追踪(正确的级别/详细程度),其他图书馆只将所有内容发送到错误/信息级别。清理跟踪

我需要清理它以使所有错误反映正确的严重性。因此,当我真的想要重新启用一般异常跟踪以跟踪生产问题时,我们基本上禁用了生产跟踪。

什么是一个很好的工作流程来解决这个问题?是否有任何工具可以帮助您以清晰的方式追踪所有跟踪语句?我目前正在计划使用更清晰,并找到所有用法,并花一些时间来解决这个问题。

更新:我在这里并不清楚,我正在寻找一些关于一般跟踪的良好指导方针,并且可能会提供一些关于重新调整我的大型代码库的建议。

+0

只是为了清楚起见,您是否对如何查找NLog跟踪语句的实例感兴趣,或寻找一种更好的方法来记录一般情况? – mfanto

回答

1

这是我使用(但我用log4net的,但我想它的相同)

.trace() - 是用来记录的东西像函数的入口和出口,和巨大的datadumps

for(a in l) { trace("List contents: "+ a) } 

的.debug() - 是考虑分支何时打印的信息完整1(一)行。 您可能在单个函数中有几条调试语句,但不是1条pr线。 当你阅读调试语句时,它应该看起来像一个简洁版本的
函数。

.debug("Checking if current account {} for user {} has more than {} amount", amount); 
.debug("Account criteria met for account {} for user {}; making withdrawel of {}", otheramount); 
.debug("Account {} debited by {} amount. Transaction key {}"); 

每条调试行都必须是独立的,并且包含理解它所需的所有信息。有没有一条线只读“检查帐户级别”,因为你的下一个问题将是哪个帐户?什么用户?什么数量?

.info() - 最多只有1个或2个pr函数,并且只在高级作用域中。必须完成数据。

.info("Withdrawel procecss complete for account {}, user {}, for amount {}"); 

.warn() - 非严重错误,数据完整,所以你可以通过这些来一个邮件记录器,并在一段时间检查一次该邮箱。

.error() - 与警告相同,但更重要。用户被阻止实现他的目标,所以你想更频繁地查看。

.fatal() - 如果可能的话,应直接转到sysadm的寻呼机,并提供关于服务器/机器名称的信息。

除此之外,请确保每个类都具有基于该类的自己的记录器,因此即使在运行时,您也可以轻松地为代码的特定区域打开和关闭日志。