.net 在一个应用程序中要记录多少,多少是太多?

.net 在一个应用程序中要记录多少,多少是太多?,.net,logging,log4net,complexity-theory,.net,Logging,Log4net,Complexity Theory,只是想知道有多少人在他们的应用程序中登录 我看到了这一点: “我通常喜欢使用错误日志 级别,以记录发生的任何异常 被应用程序捕获。我将使用 信息日志级别为“第一级” 调试方案,以显示每当我 输入或退出一个方法 使用调试日志级别进行跟踪 详细信息。致命日志 级别用于以下情况的任何异常: 我没能抓住我的网络基础知识 应用程序。” 其中包含以下代码示例: Public Class LogSample Private Shared ReadOnly Log As log4net.ILog = l

只是想知道有多少人在他们的应用程序中登录

我看到了这一点:

“我通常喜欢使用错误日志 级别,以记录发生的任何异常 被应用程序捕获。我将使用 信息日志级别为“第一级” 调试方案,以显示每当我 输入或退出一个方法 使用调试日志级别进行跟踪 详细信息。致命日志 级别用于以下情况的任何异常: 我没能抓住我的网络基础知识 应用程序。”

其中包含以下代码示例:

Public Class LogSample

   Private Shared ReadOnly Log As log4net.ILog = log4net.LogManager.GetLogger(GetType(LogSample))

   Public Function AddNumbers(ByVal Number1 As Integer, ByVal Number2 As Integer) As Integer

      Dim intResults As Integer

      Log.Info("Starting AddNumbers Method...")
      Log.Debug("Number1 Specified: " & Number1)
      Log.Debug("Number2 Specified: " & Number2)

      intResults = Number1 + Number2

      Try

         intResults = Number1 + Number2

      Catch ex As Exception

         Log.Error("Error Adding Nubmers.", ex)

      End Try

      Log.Info("AddNumbers Method Complete.")

      Return intResults

   End Function

End Class 
但这似乎给这个方法增加了很多东西。例如,一个通常是7行代码的类突然变成了12行代码。这种方法也失去了一些清晰性和简单性

但是说登录的好处是好的。例如,在生产系统中进行性能监控,追踪生产中的异常错误(并不是说您会一直打开所有日志记录)

因此我想知道人们做什么? 干杯
安东尼

< P>这是正确的,这使得代码更难阅读和维护。一个建议是考虑查看面向方面编程(AOP)。用于将日志逻辑与应用程序逻辑分离的工具。Castle Windsor和Spring是.Net社区中您可能需要研究的两个工具。

从安全角度来看,日志记录可能是一个有趣的话题。在几次DDOS攻击之后,我在CSO Online上写了一篇文章。这是e我谈到了日志记录,希望它能有所帮助:

日志节流等技术, 只写日志,并使用日志服务器 可以加强追溯力 系统的安全性。在可能的 公司已发生DDoS攻击 毫无疑问,他们会想调查这件事 袭击,调查只是 如果正确的 已使用日志记录。太多且 日志很快就会被填满, 这可能是拒绝的原因 首先,太少了 日志将一文不值,因为它们 包含的信息不足,无法 抓住罪犯

这更多的是编程的艺术方面

您不想记录所有内容,但您需要记录系统中最关键的部分

只需从广义上考虑您的程序,并尝试确定在生产中断时您需要哪些信息

首先,应用程序的所有核心逻辑模块都应该具有日志记录功能。装饰部分(如UI/动画)不需要日志记录

总之,记录每个方法的入口/出口是过分的,而且还会产生噪音,特别是因为您可以嵌入堆栈跟踪


为了提高性能,请使用剖析器。

…嘿,我被引用为SO问题的主题,会得到徽章吗?8^D

但是说真的,我想澄清一下上面的日志注释,我对“详细”日志的部分解释是基于我正在利用log4net本身的特性这一事实

在我提供的示例中,该方法每天都以警告模式记录日志。这意味着“默认情况下”记录的唯一内容如果发生异常。如果我的一个客户打电话告诉我应用程序中有错误,他们不必在屏幕上读到一些神秘的信息,我跳进日志就能看到发生了什么。大多数情况下,答案就在那里

如果答案不可用怎么办?Log4net允许我更新配置文件(无需重新编译,无需在系统管理员批准的情况下访问web服务器上的某些特殊系统文件)然后进入信息模式。现在您开始看到第二层日志记录。可能代码从未进入某个循环。可能数据检索有一个空记录集。第二层调试很有帮助,日志只会稍微变大。完成后,我可以再次更改配置并返回到轻型日志记录

当然,如果事情真的很疯狂,那么我会进入完整的调试级别,我想知道每个变量都在报告什么,我在处理什么数据行,以及应用程序中发生了什么。在我目前的工作环境中,我们没有能力对web应用程序进行远程调试,而且我们也不能总是进入生产环境数据库,而无需潜在地增加数据,因此进行完全调试是下一个最好的选择

我同意大多数人的看法,过度的日志记录确实会导致应用程序宕机,并导致更多的问题。If也不建议在应用程序中使用这种详细日志记录,除非应用程序出于安全原因提供了担保。但是,能够在需要时利用详细日志记录在我看来,不必重新编译我的代码是一个巨大的好处,如果你有一个可以轻松实现它的框架(比如log4net),那么我就说,变得友好和详细,如果你不得不回到代码本身,那么就很容易在心里过滤掉日志代码引用


我很抱歉,如果我听起来是防御或咆哮,我在任何方面都不是这个意思。我只是想提供更多的背景资料,说明我是如何以及为什么按照上述方法使用log4net设置日志记录的。8^D

至少你应该记录错误和对外部组件的调用……你提供的示例就是我所说的太多日志记录…记录一个方法的开始或结束,甚至传递给该方法的参数都没有意义…这是浪费磁盘空间,您的日志文件很快就会变得很大


要决定多少日志记录就够了并不容易。函数中的日志记录代码太多,就像您的e