logback 分为三个模块:logback-core,logback-classic和logback-access。
logback-core模块为其他两个模块奠定了基础。
logback-classic模块可以与log4j的显着改进版本同化。
logback-access模块与Servlet容器(例如Tomcat和Jetty)集成,以提供HTTP访问日志功能。
什么是 logbcak
Logback旨在作为流行的log4j项目的后继者。它是由log4j的创始人CekiGülcü设计的。它建立在十年的工业强度测井系统设计经验的基础上。最终的产品(即logback)比所有现有的logging系统更快,并且占用的空间更小,有时间隔很大。同样重要的是,logback提供了其他日志记录系统中缺少的独特且相当有用的功能。
第一步
要求
Logback-classic模块除了在类路径上的logback-classic.jar外,还 要求存在 slf4j-api.jar和logback-core.jar。
logback-*.jar文件是logback发行版的一部分,而SLF4J附带SLF4J,这是一个单独的项目。
现在让我们开始对logback进行试验。
示例1.1:日志记录的基本模板(logback-examples/src/main/java/chapter /introduction/HelloWorld1.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的变量被分配给一个logger实例,该实例通过从LoggerFactory类调用静态getLogger方法来检索。这个日志程序名为“chaptersintroduction . helloworld1”。主方法继续调用这个日志程序的调试方法,并传递“Hello World”作为参数。我们说主方法包含一个带有消息“Hello world”的level DEBUG日志语句。
请注意,以上示例未引用任何logback类。在大多数情况下,就日志记录而言,您的类仅需要导入SLF4J类。因此,绝大多数(如果不是全部)您的类将使用SLF4J API,并且不会考虑logback的存在。
您可以使用以下命令启动第一个示例应用程序“ chapters.introduction.HelloWorld1 ”:
java pages.introduction.HelloWorld1
启动HelloWorld1应用程序将在控制台上输出一行。根据logback的默认配置策略,当未找到默认配置文件时,logback将ConsoleAppender在根记录器中添加一个。
20:49:07.962 [main]调试Chapters.introduction.HelloWorld1-Hello world。
Logback可以使用内置的状态系统报告关于其内部状态的信息。在logback生命周期中发生的重要事件可以通过一个名为StatusManager的组件访问。现在,让我们通过调用StatusPrinter类的静态print()方法来指示logback打印其内部状态。
示例:打印日志程序状态(logback-examples/src/main/java/chapter /introduction/HelloWorld2.java)
···
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应用程序将产生以下输出:
14:38:05.663 [main] DEBUG com.ltx.demo1.HelloWorld2 - Hello world.
14:38:05,613 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
14:38:05,613 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
14:38:05,614 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.xml]
14:38:05,617 |-INFO in ch.qos.logback.classic.BasicConfigurator@2e5d6d97 - Setting up default configuration.
Logback解释说,由于未能找到Logback -test.xml和Logback .xml配置文件(稍后讨论),它使用自己的默认策略配置自己,该策略是一个基本的ConsoleAppender。追加器是可以被视为输出目的地的类。附加程序存在于许多不同的目的地,包括控制台、文件、Syslog、TCP套接字、JMS等等。用户还可以根据自己的具体情况轻松创建自己的附加程序。
注意,如果出现错误,logback将自动在控制台中打印其内部状态。
前面的例子相当简单。在更大的应用程序中实际的日志记录不会有太大的不同。日志记录语句的一般模式不会改变。只有配置过程不同。但是,您可能希望根据需要自定义或配置logback。后面几章将讨论Logback配置。
注意,在上面的示例中,我们已经指示logback通过调用statusprint .print()方法来打印其内部状态。Logback的内部状态信息对于诊断与Logback相关的问题非常有用。
下面列出了在应用程序中启用日志记录所需的三个步骤。
- 配置logback环境。您可以通过几种或多或少复杂的方法来实现这一点。稍后将对此进行详细介绍。
- 在希望执行日志记录的每个类中,Logger通过调用org.slf4j.LoggerFactory该类的 getLogger()方法,将当前类名或该类本身作为参数传递来检索 实例 。
- 通过调用其记录方法(即debug(),info(),warn()和error()方法)使用此记录器实例。这将在配置的附加程序上生成日志记录输出。
建筑logback
作为其构建工具,logback依赖于Maven(一种广泛使用的开源构建工具)。
一旦安装了Maven,构建logback项目(包括其所有模块)应该mvn install与在未归档logback分发目录中发出命令一样容易。Maven将自动下载所需的外部库。
网友评论