问题一:为什么打印日志的代码不允许失败,阻断流程?
为什么打印日志的代码不允许失败,阻断流程?
参考回答:
打印日志的代码不允许失败,阻断流程,是因为要确保不会因为日志打印语句抛出异常造成业务流程中断。例如,如果shop为null,则shop.getId()会抛出NullPointerException,导致业务流程被中断。
关于本问题的更多回答可点击原文查看:
https://developer.aliyun.com/ask/634163
问题二:为什么应用中不可直接使用日志系统(Log4j、Logback)中的API?
为什么应用中不可直接使用日志系统(Log4j、Logback)中的API?
参考回答:
应用中不可直接使用日志系统(Log4j、Logback)中的API,是因为这会导致系统代码与日志系统强耦合,后续切换日志实现时会产生较大的改造成本。使用SLF4J或JCL等日志框架的API可以解耦具体日志实现,便于后续维护和保证日志处理方式统一。
关于本问题的更多回答可点击原文查看:
https://developer.aliyun.com/ask/634165
问题三:为什么声明日志工具对象Logger应声明为private static final?
为什么声明日志工具对象Logger应声明为private static final?
参考回答:
声明日志工具对象Logger为private static final是为了防止被其他类非法使用,避免重复创建对象,防止对象被序列化带来的安全风险,并确保在类的生命周期内无需变更logger。
关于本问题的更多回答可点击原文查看:
https://developer.aliyun.com/ask/634166
问题四:为什么对于trace/debug/info级别的日志输出,必须进行日志级别的开关判断?
为什么对于trace/debug/info级别的日志输出,必须进行日志级别的开关判断?
参考回答:
对于trace/debug/info级别的日志输出,进行日志级别的开关判断是为了避免在配置较低日志级别时执行不必要的字符串拼接操作,浪费系统资源。
关于本问题的更多回答可点击原文查看:
https://developer.aliyun.com/ask/634192
问题五:为什么捕获异常后不要使用e.printStackTrace()打印日志?
为什么捕获异常后不要使用e.printStackTrace()打印日志?
参考回答:
捕获异常后不要使用e.printStackTrace()打印日志,因为这种方式打印的堆栈日志与业务代码日志交错混合,不利于排查问题。同时,如果信息过多,可能会导致内存满和系统请求阻塞。
关于本问题的更多回答可点击原文查看: