有不同的方式记录消息,按死亡顺序排列:
致命的错误警告信息调试,调试跟踪
我如何决定何时使用哪个?
什么是好的启发式方法?
有不同的方式记录消息,按死亡顺序排列:
致命的错误警告信息调试,调试跟踪
我如何决定何时使用哪个?
什么是好的启发式方法?
当前回答
我认为,对于应用程序级别的日志记录来说,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消息严重性
正如其他人所说,错误是问题;警告是潜在的问题。
在开发中,我经常使用警告,在警告中,我可能会放置相当于断言失败,但应用程序可以继续工作;这使我能够发现这个案子是否真的发生过,或者这是我的想象。
但是的,它归结到恢复性和现实性方面。如果你能恢复,那可能是一个警告;如果它导致某个东西实际失败,那就是一个错误。
可以从中恢复的警告。错误你不能。这是我的启发,其他人可能有其他想法。
例如,假设您在应用程序中输入/导入名称“Angela Müller”(注意u上的元音变音)。您的代码/数据库可能仅为英文(尽管它可能不应该在这个时代),因此可能会警告所有“不寻常”字符都已转换为普通英文字符。
与之形成对比的是,尝试将信息写入数据库,并连续60秒返回网络关闭消息。这与其说是警告,不如说是错误。
我认为,对于应用程序级别的日志记录来说,SYSLOG级别NOTICE和ALERT/EEMERGENCY在很大程度上是多余的-而CRITICAL/ALERT/EEMGENCY对于可能触发不同操作和通知的操作员来说可能是有用的警报级别,但对于应用程序管理员来说,这与FATAL相同。我只是无法充分区分被通知还是一些信息。如果信息不值得注意,那么它就不是真正的信息:)
我最喜欢Jay Cincotta的解释-跟踪代码的执行在技术支持中非常有用,应该鼓励将跟踪语句自由地放入代码中-尤其是与动态过滤机制结合使用,以记录来自特定应用程序组件的跟踪消息。然而,对我来说,DEBUG级别表明我们仍在弄清楚发生了什么——我认为DEBUG级输出只是一个开发选项,而不是应该在生产日志中显示的内容。
然而,对于OPERATIONAL消息,当我戴着系统管理员和技术支持甚至开发人员的帽子时,我希望在错误日志中看到一个日志级别。我使用它来记录时间戳、调用的操作类型、提供的参数、可能的(唯一)任务标识符和任务完成情况。例如,当一个独立的任务被启动时,它就被使用了,这是一个来自大型长时间运行的应用程序的真正调用。这是我希望始终记录的事情,无论是否有任何问题,所以我认为OPER级别高于致命级别,因此您只能通过进入完全静音模式来关闭它。它不仅仅是INFO日志数据,这是一个日志级别,经常被滥用,用于发送没有任何历史价值的小操作消息。
根据具体情况,这些信息可以被定向到单独的调用日志,或者可以通过从记录更多信息的大型日志中过滤出来获得。但是,作为历史信息,它总是需要知道正在做什么,而不是下降到AUDIT级别,这是另一个完全独立的日志级别,与故障或系统操作无关,并不真正符合上述级别(因为它需要自己的控制开关,而不是严重性分类),而且它肯定需要自己的独立日志文件。
我的两分钱关于致命和跟踪错误日志级别。
ERROR(错误)是指发生某些FAULT(异常)时。
致命实际上是双重故障:在处理异常时发生异常。
web服务很容易理解。
请求来了。事件记录为INFO系统检测到磁盘空间不足。事件记录为警告调用某个函数来处理请求。当处理被零除时。事件记录为ERROR调用Web服务的异常处理程序来处理除以零的操作。Web服务/框架将发送电子邮件,但无法发送,因为邮件服务现在处于脱机状态。第二个异常无法正常处理,因为Web服务的异常处理程序无法处理异常。调用了不同的异常处理程序。事件记录为致命
TRACE是我们可以跟踪函数入口/出口的时间。这与日志无关,因为此消息可以由某些调试器生成,而您的代码根本没有调用日志。因此,非来自应用程序的消息被标记为TRACE级别。例如,使用strace运行应用程序
因此,通常在程序中,您会进行DEBUG、INFO和WARN日志记录。只有当你正在编写一些web服务/框架时,你才会使用FATAL。当您调试应用程序时,您将从这种类型的软件获得TRACE日志记录。