有不同的方式记录消息,按死亡顺序排列:
致命的错误警告信息调试,调试跟踪
我如何决定何时使用哪个?
什么是好的启发式方法?
有不同的方式记录消息,按死亡顺序排列:
致命的错误警告信息调试,调试跟踪
我如何决定何时使用哪个?
什么是好的启发式方法?
当前回答
我一般同意以下约定:
跟踪-只有当我“跟踪”代码并试图找到函数的某一部分时。调试-对开发人员(IT、系统管理员等)以外的人有诊断帮助的信息。信息-要记录的一般有用信息(服务启动/停止、配置假设等)。我想随时提供信息,但在正常情况下通常不关心。这是我的开箱即用配置级别。警告-任何可能导致应用程序异常的情况,但我会自动恢复。(例如从主服务器切换到备份服务器、重试操作、丢失辅助数据等)错误-任何对操作(而不是服务或应用程序)致命的错误(无法打开所需的文件、丢失的数据等)。这些错误将迫使用户(管理员或直接用户)进行干预。这些通常是为不正确的连接字符串、丢失的服务等保留的(在我的应用程序中)。致命-强制关闭服务或应用程序以防止数据丢失(或进一步数据丢失)的任何错误。我只为最令人发指的错误和保证存在数据损坏或丢失的情况保留这些。
其他回答
可以从中恢复的警告。错误你不能。这是我的启发,其他人可能有其他想法。
例如,假设您在应用程序中输入/导入名称“Angela Müller”(注意u上的元音变音)。您的代码/数据库可能仅为英文(尽管它可能不应该在这个时代),因此可能会警告所有“不寻常”字符都已转换为普通英文字符。
与之形成对比的是,尝试将信息写入数据库,并连续60秒返回网络关闭消息。这与其说是警告,不如说是错误。
如果你能从问题中恢复过来,那就是一个警告。如果它阻止了继续执行,那就是一个错误。
从…起https://sematext.com/blog/slf4j-tutorial/:
TRACE–具有此级别的日志事件是最细粒度的,通常不需要,除非您需要完全了解应用程序中和所使用的第三方库中发生的情况。您可以期望TRACE日志记录级别非常详细。调试–与TRACE级别相比粒度更小,但仍比日常使用中需要的更多。DEBUG日志级别应用于深入诊断和故障排除所需的信息。INFO–表示发生了什么、应用程序处理了请求等的标准日志级别。使用INFO日志级别记录的信息应该是纯粹的信息,不定期查看这些信息不会导致丢失任何重要信息。警告–指示应用程序中发生意外事件的日志级别。例如,一个问题,或者一个可能会干扰其中一个进程但整个应用程序仍在运行的情况。错误–当应用程序遇到阻止一个或多个功能正常运行的问题时,应使用的日志级别。当其中一个支付系统不可用时,可以使用ERROR日志级别,但仍然可以选择在电子商务应用程序中检查购物篮,或者当您的社交媒体日志选项由于某种原因无法工作时。您还可以看到与异常相关的ERROR日志级别。
下面是“伐木工人”的清单。
Apache日志4j:§1,§2
致命:[v1.2:..]非常严重的错误事件,可能会导致应用程序中止。[v2.0:..]严重错误,将阻止应用程序继续运行。错误:[v1.2:..]可能仍然允许应用程序继续运行的错误事件。[v2.0:..]应用程序中的错误,可能可以恢复。警告:[v1.2:..]潜在的有害情况。[v2.0:..]事件可能导致错误。信息:[v1.2:..]在粗粒度级别突出显示应用程序进度的信息性消息。[v2.0:..]事件,仅供参考。调试:[v1.2:..]对调试应用程序最有用的细粒度信息事件。[v2.0:..]常规调试事件。跟踪:[v1.2:..]比DEBUG更细粒度的信息事件。[v2.0:..]细粒度调试消息,通常捕获通过应用程序的流。
Apache Httpd(和往常一样)喜欢过度使用:§
紧急情况:紧急情况–系统不可用。警觉的:必须立即采取行动[但系统仍然可用]。比容:关键条件[但无需立即采取行动]。套接字:无法获取套接字,正在退出子级错误:错误条件[但不重要]。“脚本头过早结束”警告:警告条件。[接近错误,但不是错误]通知:正常但显著的情况。httpd:捕获SIGBUS,试图在中转储核心信息:信息[和不可旋转]。[“服务器已运行x小时。”]调试:调试级消息[,即为调试而记录的消息)]。“正在打开配置文件…”痕迹1→ 痕迹6:跟踪消息[,即为跟踪而记录的消息]。“代理:FTP:控制连接完成”“proxy:CONNECT:向远程代理发送CONNECT请求”“openssl:握手:启动”“从缓冲SSL旅读取,模式0,17字节”“地图查找失败:map=rewriteitemap key=keyname”缓存查找失败,强制新的映射查找痕迹7→ 痕迹8:跟踪消息,转储大量数据“|0000:02 23 44 30 13 40 ac 34 df 3d bf 9a 19 49 39 15 |”“|0000:02 23 44 30 13 40 ac 34 df 3d bf 9a 19 49 39 15 |”
Apache commons日志记录:§
致命:导致提前终止的严重错误。期望这些在状态控制台上立即可见。错误:其他运行时错误或意外情况。期望这些在状态控制台上立即可见。警告:使用不推荐使用的API、API使用不当、“几乎”错误、其他不希望或意外但不一定“错误”的运行时情况。期望这些在状态控制台上立即可见。信息:有趣的运行时事件(启动/关闭)。期望这些在控制台上立即可见,所以要保守,尽量减少。调试:有关通过系统的流程的详细信息。期望这些仅写入日志。跟踪:更详细的信息。期望这些仅写入日志。
Apache commons记录企业使用的“最佳实践”,根据调试和信息跨越的界限来区分它们。
边界包括:
外部边界-预期异常。外部边界-意外异常。内部边界。重要内部边界。
(有关详细信息,请参阅commons日志记录指南。)
在此之前,我已经构建了以下系统:
错误-表示出现了严重错误,特定线程/进程/序列无法继续。需要一些用户/管理员干预警告-有些事情不正确,但过程可以照常进行(例如,一组100个作业中的一个作业失败,但剩余的作业可以处理)
在我所构建的系统中,管理员都在接受指示,以应对错误。另一方面,我们将观察警告,并确定每种情况是否需要任何系统更改、重新配置等。