问题一:业务执行日志是什么?需要关注什么?
业务执行日志是什么?需要关注什么?
参考回答:
"业务执行日志就是系统执行过程中输出的日志,一般没有特定格式,是开发人员用于跟踪代码执行逻辑而打印的日志,个人看来在摘要日志、详细日志、错误日志齐全的情况下,需要打印系统执行日志的地方比较少。如果一定要打印业务执行日志,需要关注以下几个点:
这个日志是否一定要打印?如果不打印是否会影响后续问题排查,如果打印这个日志后续输出频率是否会太高,造成线上日志打印过多。
日志格式是否辨识度高?如果后续对该条日志进行监控或清洗,是否存在无法与其他日志区分或者每次打印的日志格式都不一致的问题?
输出当前执行的关键步骤和描述,明确的表述出打印该条日志的作用,方便后续维护人员阅读。
日志中需包含明确的打印意义,当前执行步骤的关键参数。"
关于本问题的更多问答可点击原文查看:
https://developer.aliyun.com/ask/658484
问题二:为什么打印日志的代码不允许失败,阻断流程?
为什么打印日志的代码不允许失败,阻断流程?
参考回答:
"要确保不会因为日志打印语句抛出异常造成业务流程中断,如下图所示,shop为null的会导致抛出NPE。
public void doSth(){ log.info(""do sth and print log: {}"", shop.getId()); // 业务逻辑 ... }"
关于本问题的更多问答可点击原文查看:
https://developer.aliyun.com/ask/658485
问题三:为什么禁止使用System.out.println()输出日志?
为什么禁止使用System.out.println()输出日志?
参考回答:
"禁止使用System.out.println()输出日志有几个原因。
首先,System.out.println()是一个同步方法,在高并发情况下会严重影响性能。
其次,它不能像日志框架那样实现日志按等级输出,例如debug、info、error等级别的控制。
最后,System.out.println()打印的日志直接输出到终端,而不是日志文件,这使得日志的收集和管理变得困难。"
关于本问题的更多问答可点击原文查看:
https://developer.aliyun.com/ask/658486
问题四:System.out.println()方法为什么在高并发情况下会影响性能?
System.out.println()方法为什么在高并发情况下会影响性能?
参考回答:
因为它是一个同步方法。在其内部实现中,使用了synchronized关键字,这意味着在多线程环境下,每次只有一个线程能够执行该方法,其他线程必须等待,从而导致了性能瓶颈。
关于本问题的更多问答可点击原文查看:
https://developer.aliyun.com/ask/658487
问题五:使用System.out.println()打印日志有哪些局限性?
使用System.out.println()打印日志有哪些局限性?
参考回答:
"使用System.out.println()打印日志的局限性主要体现在三个方面:
一是它不支持日志级别的控制,如debug、info、error等;
二是它直接将日志输出到控制台,不便于日志的持久化存储和后续分析;
三是在高并发环境下,由于其同步特性,会严重影响系统性能。"
关于本问题的更多问答可点击原文查看: