|
Post by account_disabled on Jan 31, 2024 4:25:35 GMT -5
Java 拥有三大 Java 日志框架:Java Util Logging、Log4j 2 和 Logback。当为您的项目挑选一个时,您是否想过他们的性能?毕竟,仅仅因为您选择了缓慢的日志框架或次优的配置而减慢应用程序的速度是愚蠢的。 每当 Twitter 上出现 Java 日志记录的主题时,您肯定会遭到很多抱怨。丹·艾伦 (Dan Allen) 的这条推文也许最好地概括了这一点: 实际上有相当多的人足够“幸运”,能够与 Java 登录问题保持隔离: 初级开发人员通常无权做出此类选择。 中级开发人员通常在已经做出选择的代码库上工作。 高级开发人员可能会被首席技术官或其他外部决策者强迫做出选择。 然而,迟早你会到达必须选择日志框架的地步。2017年我们可以将选择分为4个选项: 拒绝做出选择并使用日志垫片 使用Java 实用程序日志记录。 使用Log4j 2.x 使用日志记录 记录垫片 如果你是… 开发 API 开发共享库 开发将部署到不属于您责任的执行环境的应用程序(例如部署在共享应用程序容器中的.war或文件).ear …那么日志记录框架的选择不是您的责任,您应该使用日志记录垫片。 如果您认为有一个选择,这是可以原谅的: Apache公共日志记录 SLF4J 但是 Apache Commons 日志记录 API 非常基本且受到限制,因此唯一的建议是不要使用,除非您喜欢像这样编写日志语句推荐: SLF4J 日志框架 如果您正在开发微服务或可以控制执行环境 WhatsApp 号码数据 的其他应用程序,那么您可能负责选择日志记录框架。在某些情况下,您可能决定使用日志垫片来推迟选择一个,但最终您仍然必须做出选择。 从一种日志记录框架更改为另一种日志记录框架通常是简单的搜索和替换,或者最坏的情况是更高级的 IDE 中提供的更高级的“结构”搜索和替换。如果日志记录性能对您很重要,那么日志记录框架的惯用日志记录 API 的性能将始终优于填充程序,并且考虑到切换成本低于其他 API,您最好直接向日志记录框架进行编码。 我还应该提到,这些框架之间存在哲学差异: Java Util Logging 的思想流派认为日志记录应该是例外而不是常态。 Log4j 2.x和Logback都展示了它们的共同传统,并且在日志记录时都非常重视性能 所有三个框架都是分层日志记录框架,允许运行时修改配置和各种输出目的地。 不过,为了让用户感到困惑,不同的框架有时对相同的事物使用不同的术语: Handlervs Appender– 这些是相同的事情,将日志消息放入日志文件中。 Formattervs Layout– 这些是同一件事,负责将日志消息格式化为特定布局。 我们可以进行功能比较,但在我看来,唯一值得区分的功能是映射诊断上下文 (MDC),因为所有其他功能差异都可以相对轻松地进行编码。映射的诊断上下文提供了一种增强日志消息的方法,其中包含实际发生日志记录的代码无法访问的信息。例如,Web 应用程序可能会将请求用户和请求的一些其他详细信息注入 MDC,这允许请求处理线程上的任何日志语句包含这些详细信息。 在某些情况下,缺乏 MDC 支持可能并不那么重要,例如: 在微服务架构中,没有共享 JVM,因此您必须在服务 API 中构建等效的功能,通常是通过显式传递 MDC 中的状态来实现。 在单用户应用程序中,通常只有一个上下文,并且通常没有太多并发性,因此对 MDC 的需求较少。 我们可以根据配置的难易程度进行比较。遗憾的是,这三个人在记录如何配置日志输出方面同样糟糕。
|
|