logback 介绍

3

Click here to load reader

Upload: yucheng-hu

Post on 05-Jul-2015

47 views

Category:

Technology


8 download

DESCRIPTION

Logback 介绍

TRANSCRIPT

Page 1: Logback 介绍

OSSEZTEC http://cwiki.ossez.com

P1 Copyright © 2014, OSSEZ INC

logback 介绍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 workingsystem. I find that teams can grow much more complex entities in four months than they can build.

—FREDERICK P. BROOKS, JR.,The Mythical Man-Month

什么是 logbackLogback为取代log4j而生。

Logback由log4j的创立者CekiGülcü设计。以十多年设计工业级记录系统的经验为基础,所创建的logback比现有任何记录系统更快、占用资源更少,有时差距非常大。

Logback提供独特而实用的特性,比如Marker、参数化记录语句、条件化堆栈跟踪和强大的事件过滤功能。以上列出的仅仅是logbook实用特性的一小部分。

对于自身的错误报告,logback依赖状态(Status)对象,状态对象极大地简化了故障查找。你也许想在上下文中使用状态对象而不是记录。

更重要的是,logback 提供了其他日志系统所没有的 offers独特并且有用 的功能。

第一步为了能够运行本章节内容中使用的示例,你需要确定你的 classpath 中已经包含有必须的包。

请参考 中的内容获得更多的一些信息和帮助。设置页面

必要条件

Logback-classic 模块需要 和 。更多的有可能还需要 包,这些包需要在 classpath 中设置。slf4j-api.jar logback-core.jar logback-classic.jar

logback-*.jar文件是 logback 分发包的一部分。这些包是随 一起发布的,你可以在 SLF4J 的分发包中找到所需要的的 jar 文件。SLF4J

现在让我们开始体验logback。

代码示例 1.1:日志的基本模板( )logback-examples/src/main/java/chapters/introduction/HelloWorld1.java

如果你可以访问 GitHub 或者已经将测试代码下载到本地了,你可以直接在本地运行。

GitHub 的代码地址为:https://github.com/qos-ch/logback/blob/master/logback-examples/src/main/java/chapters/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类中定义了 包。 同时导入了SLF4J API 定义的 Logger 类和 LoggerFactory 类,更准确的说法是定义在chapters.introductionorg.slf4j 包里的两个类。

main()方法的第一行里,调用LoggerFactory类的静态方法getLogger取得一个Logger实例,将该实例赋值给变量logger。

这个logger被命名为“chapters.introduction.HelloWorld1”。main方法继续调用这个logger的debug方法并传递参数“Hello

Page 2: Logback 介绍

OSSEZTEC http://cwiki.ossez.com

P2 Copyright © 2014, OSSEZ INC

这个logger被命名为“chapters.introduction.HelloWorld1”。main方法继续调用这个logger的debug方法并传递参数“Helloworld”。我们称之为main方法包含了一条消息是“Hello world”、级别是DEBUG的记录语句。

注意上面的例子并没有引用任何logback的类。多数情况下,只要涉及到记录,你只需要引用SLF4J的类。因此在绝大多数情况下,你的类只导入SLF4J的API,基本可以忽略logback的存在。

你可以通过下面的命令运行你的第一个简单程序 :chapters.introduction.HelloWorld1

java chapters.introduction.HelloWorld1

运行后会在控制台输出下面的一行文字。得益于logback提供了默认配置策略,当没有发现默认配置文件时,logback会为根(root)logger添加一个ConsoleAppender。

20:49:07.962 [main] DEBUG chapters.introduction.HelloWorld1 - Hello world.

Eclipse 环境下运行的结果如下:

logback可以通过内置的状态系统来报告其内部状态。通过StatusManager组件可以访问logback生命期内发生的重要事件。目前,我们调用StatusPrinter类的print()方法来打印logback的内部状态。

代码示例:打印日志状态( )logback-examples/src/main/java/chapters/introduction/HelloWorld2.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

Page 3: Logback 介绍

OSSEZTEC http://cwiki.ossez.com

P3 Copyright © 2014, OSSEZ INC

1. 2. 3.

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.

Eclipse 环境下面的运行输出:

Logback说它没有找到配置文件 和 (稍后解释),于是用默认策略进行配置,即用一个基本的logback-test.xml  logback.xmlConsoleAppender。

Appender类可被视为输出目的地的。Appender包含许多不同类型的目的地,包括控制台、文件、Syslog、TCP套接字、JMS和其他。用户可以很容易地自定义Appender

当发生错误时,logback将自动在控制台上打印其内部状态。

之前的两个示例相当简单,大型程序里真实记录志情况也不会有太大区别。记录系统的基本模式不会改变,可能改变的是配置过程。也许你想按照自己的需要来定制或配置logback,Logback 的配置章节将会会讨论配置 logback。

在上面的例子里,我们调用StatusPrinter.pring()方法来打印logback的内部状态。在诊断与logback相关的问题时,logback的内部状态信息会非常有用。

在应程序里启用记录的三个必需步骤如下:

配置logback环境。方法有繁有简,稍后讨论。在每个需要执行记录的类里,调用 org.slf4j.LoggerFactory 类的 getLogger() 方法获取一个 Logger 实例,以当前类名或类本身作为参数。调用取得的logger实例的打印方法,即debug()、info()、warn()和error(),把记录输出到配置里的各个 Appender。

构建 logback作为一个构建工具,Logback 依赖于构建工具 , Maven 是一个被广泛使用的构建工具。Maven

一旦你成功安装 Maven,构建 Logback 项目,包括所有的模块应该是已经非常容易的事情,你可以在 Logback 的安装目录下运行 Maven的构建命令mvn install,Maven 将会自动下载所有需要的包。

Logback 发行包包含完整的源代码,你可以修改源代码,创建自己的版本。你还可以在遵守 遵守LGPL或EPL 的前提下发布修改过的版本。

在 IDE 环境下构建 Logback,请参考页面 中的内容。classpath 设置页面

基本上只要你有正确的 Maven 环境,重构 Logback 一般来说不是什么问题。我们测试过在 JDK 1.7 Windows8 的环境下没有任何问题。

在老的手册中,还有一个有关环境兼容性的表格,在本手册中将这部分内容忽略了,因为新的手册中已经将这部分的内容删除了。