Log4net / Logging - 你发现什么有用?

时间:2009-04-23 15:24:38

标签: logging log4net

我刚刚开始使用Log4Net,并期待看到您发现的对您的日志记录体验有用。

您发现哪些类型的内容对记录有用;什么最终只是噪音;什么时候使用不同的日志级别(DEBUG,INFO等);你有每个日志条目的标准格式;有没有你总是记录的东西?

有任何陷阱吗?关于伐木的好文章?

更新:你在哪里登录?什么Appenders和为什么?

谢谢!

8 个答案:

答案 0 :(得分:21)

我的回答是基于罗伯特科扎克的出色反应,即使我没有以同样的方式使用我的记录

我使用五种类型的日志语句:

  • DEBUG
  • INFO
  • 警告
  • 错误
  • FATAL

DEBUG 语句是在您仍在编写应用程序时以及在需要完全了解执行流程的内容/位置时非常有用的语句。您可以使用DEBUG语句来测量锁前面的队列,或者检查登录用户的用户名,甚至是某个令人不安的SQL调用的参数。 DEBUG用于通常不需要知道的陈述。

INFO 应该在有信息时使用,如果出现问题会非常有用,但不表示出现任何问题。如果您使用太多的INFO语句,您的日志将变得臃肿且无用,所以要小心。 使用INFO获取错误时需要的任何关键信息,并且不会发生错误发生的位置。

如果您检测到可恢复但仍然意外(至少有一点预期,因为您抓住了它),请使用 WARN 级别。它表示您的应用程序可能处于不可行状态,但您认为可以在当前执行路径上恢复/继续。

错误警告适用于捕获意外异常的情况。如果您正在恢复/重试当前方法,我建议使用WARN。如果您要取消/纾困,请使用ERROR。即使你的程序可以继续,ERROR意味着你试图做某事并被拒绝,因此正在转向其他事情。

致命用于捕获远远低于被抛出位置的某个级别的内容,并且您基本上不知道发生了什么。这意味着您甚至没有尝试继续执行,您只需要记录所有可能的信息,然后尝试优雅地退出。 FATAL错误很少使用,因为通常如果您发现错误,您就有足够的信息来尝试并继续执行。但是,如果您尝试并继续可能会发生损坏,请记录致命错误,然后逃跑。


至于你要登录的地方。我通常喜欢登录我的应用服务器上的“共享”文件夹(注意权限,以便它们不公开),以便日志非常容易访问,它们始终是我调试的第一步。 如果可能,请进行设置,以便通过电子邮件发送任何警告,错误或致命错误,以便您有“高级”警告。

干杯

答案 1 :(得分:2)

  • 所有异常都以ERROR级别记录在调用堆栈中可能的最高级别(通常在事件处理程序等中)
  • 导致问题的用户输入会在WARN级别被记录(因为它可能表示我们需要改进我们的UI以更好地指导用户)
  • “重要”活动记录在INFO级别(即涉及向客户的信用卡收费,向第三方API查询等),包括所涉及的数据(通常是XML序列化的,删除了任何敏感信息) )
  • 可能会在DEBUG级别
  • 记录非常详细的活动

我们很少使用FATAL级日志记录。

我们通常使用RollingLogFileAppender INFO级别,SmtpAppender ERROR级别部署。

答案 2 :(得分:2)

Log4Net Apache Chainsaw。 Chainsaw是一个用于实时查看日志消息的仪表板。它可以处理多个应用程序,执行动态过滤以及一些其他方便的功能。

如果有疑问,请记录它(最好是在更高级别,如DEBUG或INFO或创建自己的级别)。您可以配置在配置文件中输出的内容。

答案 3 :(得分:2)

还有另一个名为ELMAH的ASP.NET日志框架。虽然它不是真正的日志框架,但更像是一个异常框架。

酷炫功能包括:

  • 0代码/重新编译以实现它
  • 有一个用于查看错误的网络用户
  • RSS feed for errors
  • 可以将其配置为将错误转储到SQL

答案 4 :(得分:1)

我使用四种类型的日志语句:

  • DEBUG
  • INFO
  • 警告
  • ERROR

我将DEBUG用于我想在调试会话期间检查的语句。通常这些不会持续发布版本。这是我正在检查变量值或记录方法的内容。

我将INFO用于连接字符串,配置以及我总希望在日志中看到的一般信息位。

警告很少用于我不确定的事情或潜在的错误情况,甚至可能检查我知道会被处理的异常。

我通常只在Catch Block中使用ERROR报告异常,并在没有其他方法处理异常时调用的ExceptionHandler中报告。

答案 5 :(得分:0)

我发现通过在开发开始时设置项目以使用Log4PostSharp,我获得了有价值的数据。基本上,结合PostSharp引擎,您可以在方法上放置一个属性,它将使用参数和返回值记录所有调用。我在Assembly.cs文件中将它设置在Debug级别,以便它默认记录所有非属性getter或setter的方法调用。

如果不加控制,它可以产生大量数据(我确保我不会在调试级别记录任何其他内容,以便很容易打开和关闭,如果性能是一个完全从发布版本中删除它问题),但有一个好的日志查看器 - 我使用BareTail - 你可以很快找出复杂的错误。它特别擅长确定所有不同线程在出现问题时所处的方法。

我使用滚动文件追加器,以便最新数据始终可用,而文件不会变得荒谬。

答案 6 :(得分:0)

还有另一个log4net日志查看器(Apache Chainsaw除外)我公司已经使用了一段时间,它被称为“log4net Dashboard”,由挪威公司(我认为)开发,名为FaktNet,它的网站是{ {3}}

它提供了一个基于Web的仪表板,它非常直观并且提供了对日志的良好概述,可以与许多不同的appender(例如滚动文件或SQL-server appender)一起使用,但它不像Apache Chainsaw那样免费是。他们确实拥有开发人员的许可证,这是免费的,仅允许本地使用,这对于想要监控他的站点的自由职业者来说就足够了(单个l4n仪表板可以连接到多个日志源)。

FaktNet拥有各种许可证,具体取决于应该能够访问仪表板的用户数量,并且他们的企业许可证并不是非常昂贵(我认为这是600美元)。鉴于其能够访问多个日志,它可以成为开发和监控许多中型到大型网站的开发团队的主要资产。

答案 7 :(得分:0)

另一个非常有用的appender是DBAppender,它可以在数据库中记录信息,这显然非常有用,以便查询日志。

this article中的更多信息。