![]() |
1
553
我一般同意以下公约:
|
![]() |
2
257
您想让系统管理员在半夜起床吗?
|
![]() |
3
110
我发现从查看日志文件的角度考虑严重性更有帮助。 致命的/危急的 :应立即调查的整体应用程序或系统故障。是的,唤醒系统管理员。由于我们更喜欢系统管理员的警报和良好的休息,因此这种严重性应该很少使用。如果它是每天发生的,而不是BFD,它就失去了它的意义。通常,致命错误在进程生存期内只发生一次,因此如果日志文件绑定到进程,这通常是日志中的最后一条消息。 误差 :肯定是应该调查的问题。系统管理员应该被自动通知,但不需要被拖下床。通过过滤日志来查看错误以及上面的错误,您可以获得错误频率的概述,并可以快速识别可能导致附加错误级联的启动失败。跟踪错误率与应用程序使用情况之间的关系,可以生成有用的质量指标,如MTBF,用于评估总体质量。例如,这个指标可能有助于在发布之前决定是否需要另一个测试周期。 警告 :这可能有问题,也可能没有。例如,预期的暂时性环境条件(如网络或数据库连接的短暂丢失)应记录为警告,而不是错误。查看过滤后的日志,只显示警告和错误,可以快速了解后续错误根本原因的早期提示。警告应谨慎使用,以免变得毫无意义。例如,网络访问丢失应该是一个警告,甚至是服务器应用程序中的一个错误,但可能只是为偶尔断开连接的笔记本电脑用户设计的桌面应用程序中的一个信息。 信息 :这是在正常情况下应记录的重要信息,如初始化成功、服务启动和停止或重要事务的成功完成。查看显示信息及以上内容的日志应该可以快速概述流程中的主要状态更改,从而提供顶层上下文,以了解任何警告或也会发生的错误。没有太多的信息消息。我们通常有5%的信息消息与跟踪相关。 痕迹 :trace是目前最常用的严重性,应该提供上下文来了解导致错误和警告的步骤。拥有适当的跟踪消息密度可以使软件更易于维护,但需要一些谨慎,因为随着程序的发展,单个跟踪语句的价值可能会随着时间的推移而变化。实现这一点的最佳方法是让开发团队养成定期审查日志的习惯,将其作为解决客户报告问题的标准部分。鼓励团队删除不再提供有用上下文的跟踪消息,并在需要时添加消息以了解后续消息的上下文。例如,记录用户输入(如更改显示或选项卡)通常很有帮助。 调试 :我们考虑调试跟踪。区别在于调试消息是在发布版本中编译的。也就是说,我们不鼓励使用调试消息。允许调试消息往往会导致越来越多的调试消息被添加,而从来没有删除过。随着时间的推移,这使得日志文件几乎毫无用处,因为很难从噪声中过滤信号。这导致开发人员不使用继续死亡螺旋的日志。相反,不断修剪跟踪消息会鼓励开发人员使用它们,从而导致良性循环。此外,这消除了由于调试代码中需要的副作用而引入的错误的可能性,这些副作用不包括在发布版本中。是的,我知道这不应该发生在好的代码中,但最好是安全的然后抱歉。 |
![]() |
4
21
这是“伐木工人”的名单。
ApacheHTTPD(和往常一样)喜欢过度杀戮: §
Apache Commons日志记录: §
ApacheCommons日志记录“企业使用的最佳实践”区分了 调试 和 信息 基于他们跨越的边界。 边界包括:
(见 commons-logging guide 了解更多信息。) |
![]() |
5
21
我建议采用系统日志严重性级别:
它们应该为大多数用例提供足够的细粒度严重性级别,并被现有的日志分析器识别。当然,您可以自由地只实现一个子集,例如
让我们标准化一些已经存在多年的东西,而不是为我们制作的每个不同的应用程序制定我们自己的标准。一旦您开始聚合日志并尝试跨不同的日志检测模式,这真的很有帮助。 |
![]() |
6
20
如果你能从问题中恢复过来,那就是一个警告。如果它阻止继续执行,那么这是一个错误。 |
![]() |
7
16
可以从中恢复的警告。错误你不能。这是我的启发式思维,其他人可能有其他想法。
例如,假设您输入/导入名称
与尝试将该信息写入数据库并连续60秒返回网络故障消息形成对比。这不仅仅是一个警告,更是一个错误。 |
![]() |
8
5
正如其他人所说,错误是问题;警告是潜在的问题。 在开发过程中,我经常使用警告,在警告中,我可能会放置相当于断言失败的内容,但应用程序可以继续工作;这使我能够了解这种情况是否真的发生,或者是我的想象。 但是的,它涉及到可恢复性和现实性方面。如果你能恢复,这可能是一个警告;如果它真的导致了一些事情的失败,那就是一个错误。 |
![]() |
9
4
我认为对于应用程序级别的日志记录来说,系统日志级别通知和警报/紧急情况在很大程度上是多余的——而对于可能触发不同操作和通知的操作员来说,关键/警报/紧急情况可能是有用的警报级别,对于应用程序管理员来说,这与致命性相同。我只是不能很好地区分被通知和一些信息。如果信息不值得注意,那就不是真正的信息:) 我最喜欢Jay Cincotta的解释——在技术支持中跟踪代码的执行是非常有用的,应该鼓励将跟踪语句自由地放入代码中——尤其是结合动态过滤机制来记录来自特定应用程序组件的跟踪消息。但是,对我来说,调试级别表明我们仍在弄清楚发生了什么事情——我将调试级别输出视为仅用于开发的选项,而不是应该在生产日志中显示的内容。 但是,当我戴着系统管理员的帽子,甚至戴着技术支持的帽子,甚至戴着开发人员的帽子,查看操作消息时,我喜欢在错误日志中看到一个日志级别。我使用它记录时间戳、调用的操作类型、提供的参数、可能的(唯一)任务标识符和任务完成。当一个独立的任务被触发时,它就被使用了,这是大型长时间运行的应用程序中真正的调用。这是我想要一直记录的事情,不管有没有什么问题,所以我认为操作级别高于致命级别,所以你只能通过进入完全静音模式来关闭它。它不仅仅是信息日志数据——日志级别经常被滥用,因为它向日志发送一些没有任何历史价值的小操作消息。 根据具体情况,这些信息可能被定向到一个单独的调用日志,也可能通过从记录更多信息的大日志中筛选出来获得。但是,作为历史信息,始终需要知道正在做什么——不下降到审计级别,另一个完全独立的日志级别与故障或系统操作无关,不真正适合上述级别(因为它需要自己的控制开关,而不是严重性分类),并且绝对需要它自己独立的日志文件。 |
![]() |
10
3
错误是错误的东西,明显的错误,没有办法避免它,它需要被修复。 警告是模式的标志 可以 是错的,但也可能不是。 既然这样说了,我就不能想出一个好的例子来说明一个警告,它也不是一个错误。我的意思是,如果您遇到了记录警告的麻烦,那么您也可以修复底层问题。 但是,像“SQL执行时间太长”这样的事情可能是一个警告,而“SQL执行死锁”是一个错误,因此可能毕竟存在一些情况。 |
![]() |
11
3
我一直在考虑警告第一个日志级别,这肯定意味着存在问题(例如,配置文件可能不在它应该在的位置,我们必须使用默认设置运行)。对我来说,一个错误意味着软件的主要目标现在不可能实现,我们将尝试彻底关闭。 |
![]() |
12
3
从 Ietf - Page 10
下表中描述了这些参数及其数值 价值观。严重性值必须介于0到7之间(含0和7)。
|
![]() |
13
2
国庆节, 作为这个问题的推论,交流您对日志级别的解释,并确保项目中的所有人员在对级别的解释中都是一致的。 在严重性和所选日志级别不一致的情况下,看到大量日志消息是很痛苦的。 如果可能,提供不同日志级别的示例。并在要记录的信息中保持一致。 高温高压 |
![]() |
14
2
我完全同意其他人的观点,认为格雷奇克斯说得最好。 我所能补充的是,这些级别通常对应于它们的字典定义,所以不会那么难。如果有疑问,把它当作一个谜。对于您的特定项目,请考虑您可能想要记录的所有内容。 现在,你能知道什么是致命的吗?你知道命运是什么意思吧?所以,你清单上的哪些项目是致命的。 好吧,这是致命的,现在让我们看看错误…冲洗并重复。 在致命的,或者可能是错误的下面,我建议更多的信息总是比更少的更好,所以错误是“向上”。不确定是信息还是警告?那就做个警告吧。 我认为我们大家都应该清楚致命的错误。其他人可能更模糊,但可以说,让他们正确无误并不那么重要。
致命的
-无法分配内存、数据库等-无法继续。
误差
-没有回复消息、事务中止、无法保存文件等。
警告
-资源分配达到了X%(比如80%),这是一个迹象,表明你可能想要重新确定你的维度。
信息
-用户登录/注销、新交易、文件装箱、新D/B字段或删除的字段。
调试
-转储内部数据结构,任何具有文件名和行号的跟踪级别。
|
![]() |
15
1
在此之前,我已经构建了使用以下功能的系统:
在我构建的系统中,管理员在指令下对错误作出反应。另一方面,我们会观察警告,并针对每种情况确定是否需要任何系统更改、重新配置等。 |
![]() |
16
1
顺便说一句,我非常喜欢捕捉所有的东西,并在以后过滤信息。 如果您在警告级别捕获并希望获得一些与警告相关的调试信息,但无法重新创建警告,会发生什么情况? 俘获 一切 以后再过滤! 即使对于嵌入式软件,这也是正确的,除非您发现处理器无法跟上,在这种情况下,您可能希望重新设计跟踪以提高效率,或者跟踪会干扰时间(您 可以 考虑在一个更强大的处理器上进行调试,但这会打开另一个蠕虫罐头)。 俘获 一切 以后再过滤!! (顺便说一句,Capture Everything也很好,因为它可以让您开发工具来完成不仅仅是显示调试跟踪(我从我的中绘制了消息序列图,以及内存使用的柱状图)。它还为将来发生错误时的比较提供了基础(保留所有日志,无论是通过还是失败,并确保在日志文件中包含内部版本号)。 |
![]() |
Abdullah Chaudhry · json文件上的文件旋转和删除 1 年前 |
![]() |
Max S · 如何从CMD读取日志的所有输出 7 年前 |
![]() |
Ivan Denchev · Apache-过去一小时的日志 7 年前 |
![]() |
ninja.coder · Log4j中的字符串串联性能 7 年前 |
![]() |
Rich · 如何记录日志。是否与操作员一起调试? 7 年前 |