士气的影响是惊人的。有一个运行的系统,即使是一个简单的系统,热情跳跃。即使只是一个矩形,来自新图形软件系统的第一张图片出现在屏幕上时,工作量也会加倍。在这个过程的每一个阶段,都有一个工作体系。我发现团队在四个月内可以成长得比他们所能建立的复杂得多。
弗雷德里克·布鲁克斯,JR。,
人月神话
作者:CekiGülcü,SébastienPennec,Carl Harris
版权所有©2000-2017,QOS.ch
什么是logback?
Logback旨在作为流行的log4j项目的继任者。它由log4j的创始人CekiGülcü设计。它建立在十年设计强大日志系统的经验基础上。由此产生的产品Logback,比所有现有的日志系统,速度更快,更小,有时还有很大的差距。同样重要的是,logback提供了其他日志记录系统中缺少的
独特且相当有用的功能
。
第一步
要求
Logback-classic模块除了需要在类路径上使用
logback-classic.jar
之外,还 需要
slf4j-api.jar
和
logback-core.jar
。
现在让我们开始尝试使用logback。
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
的
Logger
实例。这个logger被命名为“chapters.introduction.HelloWorld1”。主要方法继续调用这个logger的debug方法,传递“Hello World”作为参数的方法。我们说主要的方法包含了DEBUG级别的日志语句,其中包含消息“Hello world”。
请注意,上面的例子没有引用任何logback类。在大多数情况下,就日志而言,你的类只需要导入SLF4J类。因此,绝大多数(如果不是全部的话)你的类将使用SLF4J API,并且会忽视logback的存在。
您可以使用以下命令启动第一个示例应用程序
chapter.introduction.HelloWorld1
:
java chapters.introduction.HelloWorld1
启动
HelloWorld1
应用程序将在控制台上输出一行。依靠logback的默认配置策略,当没有找到默认的配置文件时,logback将会添加一个
ConsoleAppender
到root logger。
20:49:07.962 [main] DEBUG chapters.introduction.HelloWorld1 - Hello world.
Logback可以使用内置的状态系统报告有关其内部状态的信息。在logback的生命周期中发生的重要事件可以通过一个叫做组件来访问
StatusManager
。暂时让我们通过调用类的静态
print()
方法来指示logback打印其内部状态
StatusPrinter
。
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
应用程序将产生以下输出:
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存在许多不同的目的地,包括控制台,文件,系统日志,TCP Sockets,JMS等等。用户也可以根据自己的具体情况轻松创建自己的Appender。
请注意,如果发生错误,logback将自动在控制台上打印其内部状态。
前面的例子很简单。在更大的应用程序中的实际日志记录将不会有所不同。日志记录的一般模式不会改变。只有配置过程会有所不同。但是,您可能需要根据您的需要自定义或配置logback。Logback配置将在后面的章节中介绍。
请注意,在上面的例子中,我们已经指示logback通过调用
StatusPrinter.print()
方法来打印其内部状态 。Logback的内部状态信息在诊断与登录有关的问题时非常有用。
这是为了在应用程序中启用日志记录所需的三个步骤的列表。
1. 配置logback环境。你可以用几种或多或少的复杂方法来做到这一点。稍后再说。
2. 在你想要执行日志的每个类中,
Logger
通过调用
org.slf4j.LoggerFactory
类的
getLogger()
方法来检索一个 实例 ,将当前的类名或类本身作为参数传递。
3. 通过调用它的打印方法,即debug(),info(),warn()和error()方法来使用这个记录器实例。这将在配置的appender上产生日志输出。
建立logback
一旦你安装了Maven,构建包括它所有模块的logback项目应该就像
mvn install
在解除logback分发的目录中发出一个命令一样简单。Maven会自动下载所需的外部库。
Logback发行版包含完整的源代码,您可以修改部分logback库并构建您自己的版本。只要您遵守LGPL许可证或EPL许可证的条件,您甚至可以重新分配修改后的版本。