登录多层应用程序

时间:2011-02-16 08:23:05

标签: c# logging nlog

我在企业项目中工作,并且我试图使用nLog实现良好的日志记录,我想知道是否有任何书谈论日志记录的最佳实践,

因为我不想开始记录所有内容和任何没有标准模式的内容,如果我可以从其他人停止的地方开始,那将非常有用,

或者如果有人可以使用nLog提供关于最佳实践的信息....

提前感谢...

2 个答案:

答案 0 :(得分:4)

仔细考虑您认为需要记录的所有内容。根据我的经验,我发现大多数开发人员记录的大多数行实际上是应该作为异常抛出的错误。这通常导致没有人看到并且没有人信任的泛滥日志数据库(或邮箱)。在我编写的应用程序中,我几乎没有记录(并捕获)任何内容(当然除了记录异常,这些异常会冒泡到调用堆栈的顶部)。

剩下的几条日志行应该写一个清晰(和详细)的消息,清楚地表明发生了什么。执行此操作时,您几乎不需要指定“每种类型的记录器”,这是大多数日志记录框架所需的功能。每种类型的记录器用于防止来自某些类型或系统部分的日志事件被处理。但是,当你遵循“log little,throw often”的模式时,你会发现你不需要每种类型都有一个记录器。

答案 1 :(得分:3)

这里有一个关于SO的问题,试图记录一些日志记录最佳实践:Logging best practices

一些共同主题:

最常见的日志记录练习可能是retrieve a logger in each type, based on that type,如下所示:

class MyClass
{ 
  private static readonly Logger logger = LogManager.GetCurrentClassLogger();

  public void DoSomething()
  {
    logger.Info("Doing something");
  }
}

这使您可以在配置和控制日志记录方面具有很大的灵活性。如果您的命名空间是逻辑布局的,您可以轻松地打开或关闭日志记录,或者将其设置为给定类,命名空间,命名空间的一部分等的特定级别。

如果您包装记录器,请小心并正确包装。有关记录抽象的一些(不一定是权威的)讨论,请参阅this post。包装时需要考虑的一些重要问题:您是否要维护呼叫站点信息?考虑制作一个静态记录器,使您无法为代码的不同区域配置不同的记录。

希望这有帮助。