Logback 介绍

Page 1

OSSEZTEC

http://cwiki.ossez.com

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 working system. 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

什么是 logback Logback为取代log4j而生。 Logback由log4j的创立者Ceki Gülcü设计。以十多年设计工业级记录系统的经验为基础,所创建的logback比现有任何记录系统更快、占用资源更少,有时差距非常大。 Logback提供独特而实用的特性,比如Marker、参数化记录语句、条件化堆栈跟踪和强大的事件过滤功能。以上列出的仅仅是logbook实用特性的一 小部分。 对于自身的错误报告,logback依赖状态(Status)对象,状态对象极大地简化了故障查找。你也许想在上下文中使用状态对象而不是记录。 更重要的是,logback 提供了其他日志系统所没有的 offers独特并且有用 的功能。

第一步 为了能够运行本章节内容中使用的示例,你需要确定你的 classpath 中已经包含有必须的包。 请参考设置页面 中的内容获得更多的一些信息和帮助。

必要条件 Logback-classic 模块需要slf4j-api.jar和logback-core.jar。更多的有可能还需要logback-classic.jar包,这些包需要在 classpath 中设置。 logback-*.jar文件是 logback 分发包的一部分。这些包是随 SLF4J一起发布的,你可以在 SLF4J 的分发包中找到所需要的的 jar 文件。 现在让我们开始体验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.jav a

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()方法的第一行里,调用LoggerFactory类的静态方法getLogger取得一个Logger实例,将该实例赋值给变量logger。 这个logger被命名为“chapters.introduction.HelloWorld1”。main方法继续调用这个logger的debug方法并传递参数“Hello P1

Copyright © 2014, OSSEZ INC


OSSEZTEC

http://cwiki.ossez.com

这个logger被命名为“chapters.introduction.HelloWorld1”。main方法继续调用这个logger的debug方法并传递参数“Hello world”。我们称之为main方法包含了一条消息是“Hello world”、级别是DEBUG的记录语句。 注意上面的例子并没有引用任何logback的类。多数情况下,只要涉及到记录,你只需要引用SLF4J的类。因此在绝大多数情况下,你的类只导入SLF 4J的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程序后将会产生下面的输出:

P2

Copyright © 2014, OSSEZ INC


OSSEZTEC

http://cwiki.ossez.com

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.xml (稍后解释),于是用默认策略进行配置,即用一个基本的 ConsoleAppender。 Appender类可被视为输出目的地的。Appender包含许多不同类型的目的地,包括控制台、文件、Syslog、TCP套接字、JMS和其他。用户可以很容 易地自定义Appender 当发生错误时,logback将自动在控制台上打印其内部状态。 之前的两个示例相当简单,大型程序里真实记录志情况也不会有太大区别。记录系统的基本模式不会改变,可能改变的是配置过程。也许你想按照 自己的需要来定制或配置logback,Logback 的配置章节将会会讨论配置 logback。 在上面的例子里,我们调用StatusPrinter.pring()方法来打印logback的内部状态。在诊断与logback相关的问题时,logback的内部状态信息会非常有 用。 在应程序里启用记录的三个必需步骤如下: 1. 配置logback环境。方法有繁有简,稍后讨论。 2. 在每个需要执行记录的类里,调用 org.slf4j.LoggerFactory 类的 getLogger() 方法获取一个 Logger 实例,以当前类名或类本身作为参数。 3. 调用取得的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 的环境下没有任何问题。 在老的手册中,还有一个有关环境兼容性的表格,在本手册中将这部分内容忽略了,因为新的手册中已经将这部分的内容删除了。

P3

Copyright © 2014, OSSEZ INC


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.