The morale effects are startling. Enthusiasm jumps when there is a running system, even a simple one. Efforts redouble when the first picture from a new graphics software system appears on the screen, even if it is only a rectangle. One always has, at every stage in the process, a working system. I find that teams can grow much more complex entities in four months than they can build.
士气的效果令人惊人。当有一个运行中的系统,即使是一个简单的系统时,热情会激增。当屏幕上出现来自新图形软件系统的第一张图片时,即使只是一个矩形,付出的努力也会加倍。在整个过程的每个阶段,总是有一个可工作的系统。我发现,团队在四个月的时间里可以构建比他们能够建立的更复杂的实体。
--- 弗雷德里克·P·布鲁克斯,《神话般的程序员月份》
什么是 logback?
Logback 旨在成为流行的 log4j 项目的继任者。它由 log4j 的创始人 Ceki Gülcü 设计。它基于十年的经验,在设计工业级日志系统方面积累了丰富经验。由此产生的产品,即 logback,在速度和占用空间方面比所有现有的日志系统都更快,有时差距很大。更重要的是,logback 提供了其他日志系统中缺少的 独特而非常有用的功能。
第一步
要求
除了类路径上的 logback-classic.jar 之外,Logback-classic 模块还需要 slf4j-api.jar 和 logback-core.jar 的存在。
logback-*.jar 文件是 logback 发行版的一部分,而 slf4j-api-2.0.7.jar 则随着 SLF4J(一个单独的项目)一起发布。
现在让我们开始使用 logback 进行实验。
示例 1.1:日志记录的基本模板(logback-examples/src/main/java/chapters/introduction/HelloWorld1.java)
java
package chapters.introduction;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class HelloWorld1 {
public static void main(String[] args) {
Logger logger = LoggerFactory.getLogger("chapters.introduction.HelloWorld1");
logger.debug("Hello world.");
}
}
HelloWorld1
类定义在 chapters.introduction
包中。它首先导入了 SLF4J API 中定义的 Logger
和 LoggerFactory
类,它们位于 org.slf4j
包中。
在 main()
方法的第一行,变量 logger
通过调用 LoggerFactory
类的静态 getLogger
方法来获取一个 Logger
实例。该记录器的名称是 "chapters.introduction.HelloWorld1"
。main 方法继续调用此记录器的 debug
方法,并将 "Hello World"
作为参数传递给它。我们说主方法包含一个级别为 DEBUG 的日志记录语句,消息为 "Hello world"。
请注意,上面的示例没有引用任何 logback 类。在大多数情况下,就日志记录而言,您的类只需要导入 SLF4J 类即可。因此,您的大多数(如果不是全部)类将使用 SLF4J API,并且对 logback 的存在毫不知情。
您可以使用以下命令运行第一个示例应用程序 chapters.introduction.HelloWorld1:
bash
java chapters.introduction.HelloWorld1
运行 HelloWorld1
应用程序将在控制台上输出一行。由于 logback 的默认配置策略,在找不到默认配置文件时,logback 将向根记录器添加一个 ConsoleAppender
。
java
20:49:07.962 [main] DEBUG chapters.introduction.HelloWorld1 - Hello world.
Logback 可以使用内置的状态系统报告其内部状态信息。可以通过名为 StatusManager
的组件访问 logback 生命周期中发生的重要事件。目前,让我们通过调用 StatusPrinter
类的静态 print()
方法,指示 logback 打印其内部状态。
示例:打印日志记录器状态(logback-examples/src/main/java/chapters/introduction/HelloWorld2.java)
java
package chapters.introduction;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.core.util.StatusPrinter;
public class HelloWorld2 {
public static void main(String[] args) {
Logger logger = LoggerFactory.getLogger("chapters.introduction.HelloWorld2");
logger.debug("Hello world.");
// print internal state
LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
StatusPrinter.print(lc);
}
}
运行 HelloWorld2
应用程序将产生以下输出:
java
12:49:22.203 [main] DEBUG chapters.introduction.HelloWorld2 - Hello world.
12:49:22,076 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
12:49:22,078 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
12:49:22,093 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.xml]
12:49:22,093 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Setting up default configuration.
Logback 解释说,由于找不到 logback-test.xml 和 logback.xml 配置文件 (稍后讨论),它使用默认策略进行配置 ,即基本的 ConsoleAppender
。Appender
是一个可以看作是输出目标的类。有许多不同的目标可以用于 Appender
,包括控制台、文件、Syslog、TCP Sockets、JMS 等等。用户还可以根据自己的具体情况轻松创建自己的 Appender
。
请注意,在出现错误时,logback 将自动在控制台上打印其内部状态。
上面的例子相当简单。在更大的应用程序中进行实际的日志记录不会有太大的不同。日志记录语句的一般模式不会改变。只有配置过程会有所不同。但是,您可能希望根据自己的需求自定义或配置 logback。后续章节将介绍 logback 配置。
请注意,在上面的示例中,我们通过调用 StatusPrinter.print()
方法指示 logback 打印其内部状态。在诊断与 logback 相关的问题时,logback 的内部状态信息非常有用。
以下是在应用程序中启用日志记录的三个必要步骤的列表。
- 配置 logback 环境。您可以以几种不同的方式进行配置,这些将在后面详细介绍。
- 在希望执行日志记录的每个类中,通过调用
org.slf4j.LoggerFactory
类的getLogger()
方法,传递当前类名或类本身作为参数,检索一个Logger
实例。 - 使用此记录器实例,调用其打印方法,即
debug()
、info()
、warn()
和error()
方法。这将在配置的Appender
上产生日志输出。
构建 logback
logback 依赖于 Maven,一个广泛使用的开源构建工具。
一旦您安装了 Maven,构建 logback 项目(包括所有模块)就会变得非常简单,只需在解压 logback 分发目录所在的目录中发出 mvn install
命令即可。Maven 将自动下载所需的外部库。
Logback 分发版包含完整的源代码,因此您可以修改 logback 库的某些部分并构建自己的版本。只要遵守 LGPL 许可证或 EPL 许可证的条件,您甚至可以重新分发修改后的版本。
有关在 IDE 下构建 logback 的详细信息,请参阅 类路径设置页面上的相关部分。
版权声明:本文为博主「佳佳」的原创文章,遵循 CC 4.0 BY-NC-SA 版权协议,转载请附上原文出处链接及本声明。