2008-10-23 79 views
5

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

我已经看到了这一点:

“我通常喜欢用错误日志 级别记录是 由应用程序捕获任何异常,我将使用 的INFO日志级别为”第一水平” 调试方案显示,每当我 进入或退出的方法。从那里我 使用DEBUG日志级别跟踪 详细信息。致命的日志 级别用于那些 我失败中捕获任何异常我基于网络 应用程序“。

这与它的代码示例:

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

但是在说,伐木的好处是很好的。在生产系统实例性能监视,追击生产异常的bug(不是说你会这一切的日志功能在所有的时间。

因此,我想知道是什么人呢? 干杯 安东尼

+0

http://stackoverflow.com/questions/163385/logging-约定 – 2008-10-23 23:51:38

回答

3

你说得对,这会让代码更难读懂和维护。一个建议是考虑寻找AOP(面向方面​​编程)工具来将你的日志逻辑和你的应用程序逻辑分离开来,Castle Windsor和Spring是两个来的介意.Net社区,你可能想研究。

0

从安全s tandpoint日志记录可能是一个有趣的话题。在一段DDOS攻击之后,我在CSO Online上写了一个blog entry。这是我谈的记录部分,希望它有助于一点:

技术如日志节流, 只写日志,并且使用的日志服务器 可以增强系统的追溯 安全。在发生可能的 DDoS攻击后,公司 无疑将要调查 攻击。如果已使用正确的日志记录级别 ,则只有 可能的调查。太多,并且 日志将很快填满, 这可能是DoS 摆在首位的原因。太少和 日志将是毫无价值的,因为他们 不包含足够的信息到 抓住罪犯。

3

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

你不想记录一切。但是你会想记录系统中最关键的部分。

只要从广义上考虑您的计划,并尝试确定哪些信息您将需要,以防万一生产中断。

首先,应用程序的所有核心逻辑模块都应具有日志记录功能。装饰部件例如UI /动画不需要记录。恕我直言,记录每个方法的入口/出口都是过量的,并且还会产生噪声,尤其是因为您可以嵌入堆栈跟踪。

而对于性能,请使用分析器

+0

日志记录是一个离线的分析器,你可能没有其他的东西 – 2016-11-22 16:27:18

3

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

但是,虽然我想澄清一下上面有关日志记录的一点,但是我对“详细”日志记录的理由有一部分是基于我利用log4net本身功能的事实。

在我提供的示例中,该方法在WARN模式下每天登录。这意味着唯一被默认记录的东西是如果发生异常。如果我的某个客户打电话给我的应用程序出现错误,他们不必在屏幕上看到我一些神秘的信息,就跳进日志,看看发生了什么。大多数情况下,答案就在那里。

如果答案不可用,会发生什么情况? Log4net允许我更新配置文件(不需要重新编译,不需要通过系统管理员的批准访问Web服务器上的某些特殊系统文件)并进入INFO模式。现在你开始看到第二层日志记录。也许代码从来没有把它变成一个特定的循环。也许数据检索有一个空的记录集。这第二级调试很有帮助,日志只会稍微大一些。一旦完成,我可以再次更改配置并返回到日志记录。当然,如果事情真的很疯狂,那么我会进入完整的调试级别,我想知道每个变量正在报告什么,我正在处理哪些DataRows以及应用程序中发生了什么。在我目前的工作地点,我们没有能力对我们的Web应用程序进行远程调试,并且我们不能在没有潜在增加数据的情况下总是进入生产数据库,因此进行完全调试是次佳选择。

我同意那里的大多数人认为,过多的日志记录可以真正降低应用程序的性能,导致更多的问题,而不是价值。如果不会在应用程序中推荐这种详细的日志记录,除非应用程序出于安全原因保证它。但是,在需要时能够利用详细日志记录,而不必重新编译我的代码,如果您有一个可以轻松实现的框架(例如log4net),那么我会说变得更好,详细而且如果你不得不重新进入代码本身,很容易在思想上滤除日志代码引用。

我很抱歉,如果我的声音是防御性或咆哮声,我不是故意的。我只是想提供更多的背景知道如何以及为什么在上述方法中使用log4net设置我的日志记录。 8^D

+0

嘿,把它当作补充,我把你当作源代码。不要把它当成一件坏事 – vdhant 2008-10-23 23:50:04

0

在最低限度内,您应该记录错误并调用外部组件...您提供的示例是我要称之为的很多记录......没有任何记录表明您处于一个方法的开始,或一个方法的结尾,甚至是传递给该方法的参数......它浪费了磁盘空间,你的日志文件很快就会变得很大......

RWendi

0

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

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

对于确定有多少记录您的应用程序,看看这篇文章"System Logging and Log Analysis“由Marcus Ranum帮助。

希望这有助于。