如果您曾经不得不分析生产中的问题,我相信您知道良好的日志记录是多么重要。良好的日志记录需要三件事:
- 日志消息需要提供所需的信息,以了解应用程序在内部执行的操作。
- 编写日志消息必须尽可能高效,这样才能不影响应用程序的性能。
- 您需要能够根据不同的部署环境和情况调整日志详细信息。
虽然您仍然需要自己决定应该为每个用例编写哪些日志消息,但您不需要担心需求2和需求3。各种日志框架已经解决了这些技术需求。您只需要选择其中一个,并使用它来编写日志消息。
为了让它变得更好,SLF4J提供了一个标准化的API,大多数框架都以某种方式实现了该API。这使您能够在不更改代码的情况下更改日志框架。您只需要将依赖关系更改为实现SLF4J接口的不同框架。
使用SLF4J写入日志消息
使用SLF4J编写日志消息非常简单。首先需要调用 LoggerFactory
上的 getLogger
方法来实例化一个新的Logger对象。然后可以调用记录器上的 debug、info、warning、error
或 fatal
方法之一,以编写具有相应日志级别的日志消息。在这里,您可以看到一个典型示例:
public class MyClass { Logger log = LoggerFactory.getLogger(this.getClass().getName()); public void myMethod() { log.info("This is an info message"); // ... } }
因此,如果这些框架很容易互换,您应该选择哪一个?
这个问题的答案并不像你想象的那么简单。Java世界中广泛使用了几种可用的框架。在本文中,我想向您介绍Log4j及其两个继承者Logback和Log4j2。
Apache Log4J
ApacheLog4J是一个非常古老的日志框架,是几年来最流行的日志框架。它介绍了一些基本概念,如分层日志级别和日志记录器,这些概念仍然被现代日志框架使用。
开发团队在2015年宣布了Log4j的生命终结。虽然很多遗留项目仍在使用它,但如果您启动一个新项目,您应该更喜欢本文中讨论的其他框架之一。
您可以使用我之前展示的SLF4JAPI来使用Log4j编写日志消息。因此,在讨论Logbac