7

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

我见过这个:

“我通常喜欢使用 ERROR 日志级别来记录应用程序捕获的任何异常。我将使用 INFO 日志级别作为“第一级”调试方案,以便在我进入或退出方法时显示。从那里我使用DEBUG 日志级别来跟踪详细信息。FATAL 日志级别用于我在基于 Web 的应用程序中未能捕获的任何异常。

其中有这个代码示例:

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 行代码。该方法也失去了一些清晰性和简单性。

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

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

4

6 回答 6

4

它更像是编程的艺术方面。

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

只需从广义上考虑您的程序,并尝试确定您需要哪些信息,以防生产中出现问题。

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

恕我直言,记录每个方法的进入/退出是多余的,而且还会产生噪音,尤其是因为您可以嵌入堆栈跟踪。

为了提高性能,请使用profiler

于 2008-10-23T23:26:20.620 回答
4

...嘿,我会因为在 SO 问题中被引用为主题而获得徽章吗?8^D

但说真的,关于上面的日志记录,我想澄清的一件事是,我对“详细”日志记录的部分理由是基于我正在利用 log4net 本身的特性这一事实。

在我提供的示例中,该方法每天以 WARN 模式登录。这意味着“默认”记录的唯一事情是发生异常。如果我接到一位客户关于应用程序出错的电话,他们不必在屏幕上给我读一些神秘的消息,我会跳入日志并查看发生了什么。大多数时候,答案就在那里。

如果没有现成的答案会发生什么?Log4net 允许我更新我的配置文件(无需重新编译,无需通过系统管理员的批准访问 Web 服务器上的某些特殊系统文件)并进入 INFO 模式。现在您开始看到第二层日志记录。也许代码从未进入某个循环。也许数据检索有一个空记录集。这第二级调试很有帮助,日志只会稍微变大一点。完成此操作后,我可以再次更改配置并返回到光照日志。

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

我同意大多数人的观点,过多的日志记录确实会导致应用程序崩溃并导致比其价值更多的问题。If 也不会推荐在应用程序中使用这种详细日志记录,除非应用程序出于安全原因需要这样做。但是,在我看来,能够在需要时利用详细日志记录并且不必重新编译我的代码是一个巨大的好处,如果你有一个可以轻松实现它的框架(例如 log4net),那么我会说变得很好和详细并且如果您不得不回到代码本身,那么在心理上过滤掉日志代码引用是很容易的。

如果我听起来很防御或咆哮,我深表歉意,在任何方面我都不是这个意思。我只是想提供更多背景知识,说明我在上述方法中使用 log4net 设置日志记录的方式和原因。8^D

于 2008-10-23T23:41:34.037 回答
3

你是对的,这确实使代码更难阅读和维护。一项建议是考虑使用 AOP(面向方面​​的编程)工具将日志记录逻辑与应用程序逻辑分开。Castle Windsor 和 Spring 是 .Net 社区中您可能想要研究的两个。

于 2008-10-23T23:20:28.150 回答
0

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

日志限制、只写日志和使用日志服务器等技术可以增强系统的追溯安全性。在发生可能的 DDoS 攻击后,该公司无疑会想要调查该攻击。只有使用了正确的日志记录级别,才能进行调查。太多了,日志很快就会被填满,这首先可能是 DoS 的原因。太少,日志将毫无价值,因为它们不包含足够的信息来抓捕罪犯。

于 2008-10-23T23:20:49.350 回答
0

至少您应该记录错误和对外部组件的调用...您提供的示例是我所说的太多日志记录...没有必要记录您处于方法的开始,或者方法的结尾,甚至是传递给方法的参数......这是浪费磁盘空间,你的日志文件很快就会变得非常大......

温迪

于 2008-10-24T01:23:46.793 回答
0

决定多少日志记录就足够了并不容易。在您的示例中,函数中太多的日志记录代码会掩盖实际的逻辑代码。太多的日志条目会使日志变得嘈杂。但是太少的日志不是很有帮助!

对于 .NET,您可以使用 AOP 库 PostSharp 来帮助记录函数的进入和退出以及参数的值等等。

有关确定应用程序记录多少的帮助,请查看 Marcus Ranum 撰写的这篇文章“系统日志记录和日志分析”。

希望这可以帮助。

于 2016-05-20T20:17:55.110 回答