有不同的方式记录消息,按死亡顺序排列:
致命的错误警告信息调试,调试跟踪
我如何决定何时使用哪个?
什么是好的启发式方法?
有不同的方式记录消息,按死亡顺序排列:
致命的错误警告信息调试,调试跟踪
我如何决定何时使用哪个?
什么是好的启发式方法?
当前回答
微软如何在其新的准标准Microsoft.Extension.Logging中定义不同的LogLevel值非常有趣(重点是我的):
批评的描述不可恢复的应用程序或系统崩溃或需要立即关注的灾难性故障。错误当前执行流停止时突出显示的日志失败。这些应指示当前活动中的故障,而不是应用程序范围内的故障。警告突出显示应用程序中异常或意外事件的日志但不会导致应用程序执行停止。信息跟踪应用程序一般流程的日志。这些日志应该具有长期价值。调试开发期间用于交互式调查的日志。这些日志应主要包含对调试有用的信息并且没有长期价值。查出包含最详细消息的日志。这些消息可能包含敏感应用程序数据。这些消息被禁用默认设置,在生产环境中永远不应启用。
其他回答
我认为,对于应用程序级别的日志记录来说,SYSLOG级别NOTICE和ALERT/EEMERGENCY在很大程度上是多余的-而CRITICAL/ALERT/EEMGENCY对于可能触发不同操作和通知的操作员来说可能是有用的警报级别,但对于应用程序管理员来说,这与FATAL相同。我只是无法充分区分被通知还是一些信息。如果信息不值得注意,那么它就不是真正的信息:)
我最喜欢Jay Cincotta的解释-跟踪代码的执行在技术支持中非常有用,应该鼓励将跟踪语句自由地放入代码中-尤其是与动态过滤机制结合使用,以记录来自特定应用程序组件的跟踪消息。然而,对我来说,DEBUG级别表明我们仍在弄清楚发生了什么——我认为DEBUG级输出只是一个开发选项,而不是应该在生产日志中显示的内容。
然而,对于OPERATIONAL消息,当我戴着系统管理员和技术支持甚至开发人员的帽子时,我希望在错误日志中看到一个日志级别。我使用它来记录时间戳、调用的操作类型、提供的参数、可能的(唯一)任务标识符和任务完成情况。例如,当一个独立的任务被启动时,它就被使用了,这是一个来自大型长时间运行的应用程序的真正调用。这是我希望始终记录的事情,无论是否有任何问题,所以我认为OPER级别高于致命级别,因此您只能通过进入完全静音模式来关闭它。它不仅仅是INFO日志数据,这是一个日志级别,经常被滥用,用于发送没有任何历史价值的小操作消息。
根据具体情况,这些信息可以被定向到单独的调用日志,或者可以通过从记录更多信息的大型日志中过滤出来获得。但是,作为历史信息,它总是需要知道正在做什么,而不是下降到AUDIT级别,这是另一个完全独立的日志级别,与故障或系统操作无关,并不真正符合上述级别(因为它需要自己的控制开关,而不是严重性分类),而且它肯定需要自己的独立日志文件。
根据RFC 5424,系统日志协议(IETF)-第10页:
每个消息优先级也有一个十进制严重性级别指示符。下表中描述了这些参数及其数值价值观严重性值必须介于0到7之间(含0到7)。数值严重性密码0紧急情况:系统不可用1警报:必须立即采取行动2临界:临界条件3错误:错误条件4警告:警告条件5注意:正常但重要的情况6信息:信息性消息7调试:调试级别消息表2。Syslog消息严重性
我建议采用Syslog严重级别:调试、信息、通知、警告、错误、严重、警报、紧急。看见http://en.wikipedia.org/wiki/Syslog#Severity_levels
它们应该为大多数用例提供足够的细粒度严重性级别,并被现有的日志解析器识别。当然,您可以根据应用程序的要求,自由地只实现一个子集,例如调试、错误、紧急情况。
让我们对已有多年的应用程序进行标准化,而不是为我们制作的每个不同应用程序制定自己的标准。一旦您开始聚合日志并尝试检测不同日志之间的模式,这将非常有用。
塔科·扬·奥辛加的回答非常好,而且非常实用。
我同意他的观点,尽管有些不同。
在Python上,只有5个“命名”日志级别,所以我是这样使用它们的:
调试——对故障排除很重要的信息,通常在正常的日常操作中被抑制信息——日常操作,作为程序按设计执行功能的“证明”警告——超出名义但可恢复的情况,*或*遇到可能导致未来问题的事情错误——发生了一些需要程序执行恢复的事情,但恢复成功。不过,程序可能没有处于最初预期的状态,因此程序用户需要进行调整关键——发生了无法挽回的事情,程序可能需要终止,以免每个人都生活在罪恶的状态中
这是一个古老的话题,但仍然相关。本周,我为同事们写了一篇关于它的小文章。出于这个目的,我还制作了这个备忘单,因为我在网上找不到。